【问题标题】:Regular expression multi-line replacement in PythonPython中的正则表达式多行替换
【发布时间】:2013-09-26 11:52:49
【问题描述】:

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

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

【问题讨论】:

    标签: python regex


    【解决方案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 表示全部替换。

    【讨论】:

    • print 'this works:', re.sub('START.*END', 'NEWTEXT', text, 0, re.DOTALL) #also works
    • @MarwanAlsabbagh 是的,我只是在测试这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多