这是python2.7的结果。
>>> re.sub('.*?', '-', 'abc')
'-a-b-c-'
我以为的结果should如下。
>>> re.sub('.*?', '-', 'abc')
'-------'
但事实并非如此。为什么?
据我所知,对这种行为的最好解释来自regexPyPI 包,其目的是最终代替re
(尽管这种情况已经持续很长时间了)。
有时不清楚应该如何处理零宽度匹配。例如,.* 在匹配 >0 个字符后是否应该直接匹配 0 个字符?
大多数正则表达式实现都遵循 Perl (PCRE) 的领导,但 re 模块有时不这样做。 Perl 行为似乎是最常见的(并且 re 模块有时肯定是错误的),因此在版本 1 中,正则表达式模块遵循 Perl 行为,而在版本 0 中,它遵循旧版 re 行为。
例子:
# Version 0 behaviour (like re)
>>> regex.sub('(?V0).*', 'x', 'test')
'x'
>>> regex.sub('(?V0).*?', '|', 'test')
'|t|e|s|t|'
# Version 1 behaviour (like Perl)
>>> regex.sub('(?V1).*', 'x', 'test')
'xx'
>>> regex.sub('(?V1).*?', '|', 'test')
'|||||||||'
(?VX)
在正则表达式中设置版本标志。第二个示例是您所期望的,并且据说是 PCRE 所做的。蟒蛇的re
有点不标准,保留它可能只是出于向后兼容性的考虑。我找到了类似的例子 (with re.split
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)