Python中的正则表达式多行替换

时间:2013-09-26 11:52:49

标签: python regex

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

在下面的示例中,当指定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

1 个答案:

答案 0 :(得分:1)

我不确定原因,但您必须在re.sub中指定flags=(文档使用它)。

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意味着替换所有。