使用DOTALL多次替换后会中断re.sub



我一直在尝试对相当大的文本块调用re.sub。奇怪的是,在更换了16次之后,它看起来突然停止了更换任何东西。但是,如果我去掉了DOTALL标志,它就会突然重新起作用。

我的输入文件:

<a>
<a>
<a>
<a>
.... (repeats about 100 times)

我使用的代码/正则表达式:

import re
file = open("temp.txt", 'r')
text = ''
for line in file:
text += line
print re.sub(".*", "", text, re.DOTALL)

打印内容:

(15 blank lines)

...
<a>
<a>
<a>
...

显然,应该返回的是一个空字符串。奇怪的是,如果DOTALL被排除在外,那么我会得到所有的空行(换行符按预期保留)。如果我用其他regex字符串尝试这个,那么它会正确运行这些字符串,但最多只能运行15次

知道为什么会发生这种事吗?或者我只是疯了?

re.sub的第四个参数是count,而不是flags。您应该使用关键字参数flags=来指定它。

print re.sub(".*", "", text, flags=re.DOTALL)

如果没有关键字自变量,它将意味着count=16(re.DOTALL=16);由此产生的替换最多只发生16次。

最新更新