re.sub(“。*”,“,”(replacement)“,“ text”)在Python 3.7上的替换次数翻倍

re.sub(“。*”,“,”(replacement)“,“ text”)在Python 3.7上的替换次数翻倍,第1张

re.sub(“。*”,“,”(replacement)“,“ text”)在Python 3.7上的替换次数翻倍

这不是一个错误,而是来自提交fbb490fd2f38bd817d99c20c05121ad0168a38ee的Python
3.7中的错误修复。

在正则表达式中,非零宽度匹配将指针位置移动到匹配的末尾,以便下一个断言(无论是否为零宽度)都可以从匹配之后的位置继续进行匹配。因此,在您的示例中,在

.*
贪婪地匹配并消耗了整个字符串之后,指针随后移至字符串末尾的事实实际上仍然为该位置的零宽度匹配留有“余地”,这可以从以下代码,在Python2.7、3.6和3.7中的行为相同:

>>> re.findall(".*", 'sample text')['sample text', '']

因此,该错误修复程序是在非零宽度匹配之后立即替换零宽度匹配,现在可以用替换文本正确替换两个匹配。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存