【发布时间】:2022-11-27 07:45:07
【问题描述】:
在 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)'
怎么了?如何解决?
【问题讨论】:
-
显然是一个错误。不确定您希望得到什么样的答案。
-
只发生在
.*(或.*$),而不是.+或^.*。而且,好吧,你有一个无穷匹配结束时零字节字符串的数量,所以你可能会很高兴你只得到一个重复。 :) -
@Aran-Fey,因为
.*很贪心,我希望只得到一次“(替换)”。为什么是两个? -
不过,这真的是 Python 中的错误吗?甚至 PCRE regex 的行为也完全相同。另请注意,Python variant 在 regex101 上的行为也相同,但他们也可以使用
3.7.2...奇怪的是,如果你有没有什么在那里,替换只发生一次。我猜字符串^的开头和字符串$的结尾算作两个空格字符?