一般来说,前瞻性断言遵循其他一些模式:
Isaac(?!Asimov)
但它出现在模式的开头是什么意思?
以下是一个示例(simplename模式来自docutils):
#!/usr/bin/env python
import re
regex = re.compile(r'(?P<simplename>(?:(?!_)\w)+(?:[-._+:](?:(?!_)\w)+)*)')
input = ['_1_2_name', '1_2_name', 'name_1_2', ':123', 'name:s:s_dd', 'name_-+.sdf']
for i in input:
match = regex.match(i)
if match:
print "MATCH: ", match.group('simplename')
else:
print "NOT MATCH: %s" % i
此正则表达式将正确匹配不以_开头的变量名称,但在使用libpcre运行相同的正则表达式时它不起作用。 Python不匹配&#34; _1_2_name&#34;但是libpcre会匹配它并得到&#34; 1_2_name&#34;结果。
我猜Python匹配开头的位置,但libpcre没有。 Python和PCRE有什么区别?使用PCRE的等效模式是什么?