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

时间:2015-04-13 03:25:52

标签: python regex

我一直试图在相当大的文本块上调用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被排除,那么我得到所有空行(按预期保留换行符)。如果我尝试使用其他正则表达式字符串,那么它会正确运行,但最多只能运行15次。

知道为什么会这样吗?或者我只是疯了?

1 个答案:

答案 0 :(得分:4)

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

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

如果没有关键字参数,则表示count=16(re.DOTALL = 16);结果替换最多只发生16次。