【问题标题】:regex multiline matching in pythonpython中的正则表达式多行匹配
【发布时间】:2021-12-09 21:35:52
【问题描述】:

我想过滤 'here is a sample' 以及之后的所有行,直到 2 个新行

这是我的文件(您可以将其用作日志文件):

here is a sample text
random line1


here is a sample text
random line2
random line3
random line4


should not match
random line 6


here is a sample 
random line 5

我试过了:

    \r?\n?(here is a sample).*\r?\n?(.*)

这样我只过滤下一行,如果我做最后一部分 '\r?\n?(.*)' 我又得到了另一条线..

我的问题。我需要什么正则表达式才能匹配所有行直到我看到 2 个新行

【问题讨论】:

    标签: python regex


    【解决方案1】:

    如果你想匹配所有直到你有 2 个换行符,但如果没有 2 个换行符也想匹配最后一次出现:

    ^here is a sample.*(?:\n(?!\n).*)*
    

    模式匹配:

    • ^ 字符串开始
    • here is a sample.* 匹配字面和其余行
    • (?:非捕获组作为一个整体重复部分
      • \n(?!\n) 匹配一个换行符,并断言它后面不直接跟一个换行符
      • .* 匹配该行的其余部分
    • )*关闭非捕获组并选择性地重复它

    Regex demo

    如果应该存在 2 个换行符,您可以为要保留的部分使用捕获组,并匹配 2 个换行符以确保它们存在。

    ^(here is a sample.*(?:\n(?!\n).*)*)\n\n
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多