>> import re >>>-6ren">
gpt4 book ai didi

python - re.sub (".*", ", "(replacement )", "text") 在 Python 3.7 上加倍替换

转载 作者:太空狗 更新时间:2023-10-29 18:23:43 27 4
gpt4 key购买 nike

在 Python 3.7 上(在 Windows 64 位上测试过),使用 RegEx .* 替换字符串会使输入字符串重复两次!

在 Python 3.7.2 上:

>>> import re
>>> re.sub(".*", "(replacement)", "sample text")
'(replacement)(replacement)'

在 Python 3.6.4 上:

>>> import re
>>> re.sub(".*", "(replacement)", "sample text")
'(replacement)'

在 Python 2.7.5(32 位)上:

>>> import re
>>> re.sub(".*", "(replacement)", "sample text")
'(replacement)'

怎么了?如何解决?

最佳答案

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

在正则表达式中,非零宽度匹配将指针位置移动到匹配的末尾,以便下一个断言,无论是否为零宽度,都可以从匹配后的位置继续匹配。因此,在您的示例中,在 .* 贪婪地匹配并消耗整个字符串之后,指针随后移动到字符串末尾的事实实际上仍然为零宽度匹配留下了“空间”该位置,从以下代码中可以明显看出,它在 Python 2.7、3.6 和 3.7 中的行为相同:

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

因此,有关在非零宽度匹配之后立即替换零宽度匹配的错误修复现在可以使用替换文本正确替换两个匹配。

关于python - re.sub (".*", ", "(replacement )", "text") 在 Python 3.7 上加倍替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com