【问题标题】:Replace re.DOTALL with equivalent将 re.DOTALL 替换为等价物
【发布时间】:2021-05-16 00:35:03
【问题描述】:

下面这行python代码中是否有表达式可以替换re.DOTALL标志:

r = re.compile(r'<p>.*<p>.', re.IGNORECASE | re.MULTILINE | re.DOTALL)

喜欢在这个正则表达式中添加任何表达式:r'&lt;p&gt;.*&lt;p&gt;.' 是这样的:

r = re.compile(r'<p>something.*<p>.', re.IGNORECASE | re.MULTILINE )

但需要保持相同的行为,即匹配多行字符串(段落)

谢谢

【问题讨论】:

标签: python python-3.x scripting coding-style


【解决方案1】:

您可以使用inline flag(?s)

re.compile(regex, re.DOTALL)

等价于

re.compile('(?s)' + regex)

【讨论】:

    【解决方案2】:

    我觉得你说反了,下面两个应该是等价的:

    r = re.compile(r'<p>[\s\S]*<p>.', re.IGNORECASE | re.MULTILINE)
    
    r = re.compile(r'<p>.*<p>.', re.IGNORECASE | re.MULTILINE | re.DOTALL)
    

    也就是说,在DOTALL 模式下匹配.* 的行为应该与在禁用DOTALL 模式下匹配[\s\S]* 的行为相同。

    【讨论】:

    • 我将 json 输入文件中的正则表达式提供给脚本,如下所示:"regex":"

      [\s\S]*

      " 但仍显示错误消息"在文件 "input_file.json" 中解码 json 时出错 "

    • JSON?不要在 JSON 上使用正则表达式,而是使用解析器。
    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多