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