【问题标题】:Write regex for a text with several \n为包含多个 \n 的文本编写正则表达式
【发布时间】:2013-01-19 18:12:19
【问题描述】:

这个正则表达式<li>.*end 不适用于以下文本,我做错了什么?

文字

    <li>asdsadasd
adssadasdasdasdas
asdasdasdasdasdad
adsasdasdasdasd
dasdadadsadadasdasdasdasda
end

有人可以帮我写一个正则表达式来获取所有文本吗?

【问题讨论】:

标签: python regex regex-negation regex-greedy


【解决方案1】:

默认情况下,. 不匹配换行符。您必须通过 DOTALL 标志...

regex = re.compile('<li>.*end', re.DOTALL)

或者等价的,

regex = re.compile('<li>.*end(?S)')

编辑:不是re.MULTILINE 标志——它会改变$^ 的行为。

【讨论】:

    【解决方案2】:

    你必须从re中选择多行选项:

    import re
    expr = re.comile("<li>.*end", re.M)
    

    考虑到 cmets 和 Dietrich 的回答,如果您需要 $^ 的行为相同,请使用 re.DOTALL 而不是 re.M/re.MULTILINE

    【讨论】:

    • 您想要 DOTALL 模式 (re.S),而不是 MULTILINE。见Dietrich's (updated) answer
    • +1 感谢您的指出;我已将此信息添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多