0

我想搜索并替换包含换行符的文本块。

在下面的示例中,当指定了 DOTALL 标志时,findall 的行为符合预期并'.'匹配任何字符,包括换行符。但是在调用 sub 时,DOTALL 标志似乎没有做任何事情,也没有找到匹配项。我只是想确认我不能使用“。” 用 sub 替换包含换行符的文本,或者如果我没有正确调用该函数。

代码

import re
text = """
some example text...
START
bla bla
bla bla
END
"""
print 'this works:', re.findall('START.*END', text, re.DOTALL)
print 'this fails:', re.sub('START.*END', 'NEWTEXT', text, re.DOTALL)

输出

this works: ['START\nbla bla\nbla bla\nEND']
this fails:
some example text...
START
bla bla
bla bla
END
4

1 回答 1

1

我不完全确定为什么,但你必须flags=re.sub(文档使用它)中指定。

print 'this works:', re.sub('START.*END', 'NEWTEXT', text, flags=re.DOTALL)

可能是因为可选count参数。

编辑:

我认为这count毕竟是因为争论,因为这也有效:

print 'this works:', re.sub('START.*END', 'NEWTEXT', text, 0, re.DOTALL)

0意思是全部替换。

于 2013-09-26T11:56:27.637 回答