【问题标题】:python regular_expression_ multiple expression within expressionpython regular_expression_表达式中的多个表达式
【发布时间】:2017-09-05 12:50:15
【问题描述】:

在我的 python 脚本中,它需要一个类似的表达式

"\[.*[ERROR].*\n.*\n.*\n.*/\n.*is for multiple time/[\]]{2}"

请让我知道如何多次服用"\n."...我卡在这个地方了

【问题讨论】:

    标签: python


    【解决方案1】:

    有可用的 multiline 标志,让您可以跨多行匹配。

    https://docs.python.org/2/library/re.html#re.MULTILINE

    re.多行

    当指定时,模式字符 '^' 匹配字符串的开头和每行的开头(紧跟在每个换行符之后);并且模式字符 '$' 匹配字符串的末尾和每行的末尾(紧接在每个换行符之前)。默认情况下,'^' 仅匹配字符串的开头,而 '$' 仅匹配字符串的末尾以及字符串末尾的换行符(如果有)之前。

    您还可以访问 DOTALL,它的 . 甚至可以匹配换行符

    re.DOTALL

    制作'.'特殊字符完全匹配任何字符,包括换行符;没有这个标志,'.'将匹配除换行符以外的任何内容。

    根据你的匹配,这两个标志让你选择如何处理换行符。在您的情况下,您可能希望像这样调整您的模式:

    text = '\n[ [ERROR]\n\nsome text\nis for multiple time]'
    re.findall("\[.*\[ERROR\].*is for multiple time\]", text, re.DOTALL)
    # result: ['[ [ERROR]\n\nsome text\nis for multiple time]']
    

    【讨论】:

    • 实际上它给出了错误的输出。因为第一个“ .* ”本身作为 re.DOTALL 并给出了完整的字符串,但我想要最后一个“ .* ”很多时间也需要 \n
    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多