【问题标题】:REGEX - Matching again multiple linesREGEX - 再次匹配多行
【发布时间】:2011-02-12 11:49:50
【问题描述】:

给定文本如下:

XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX.XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX.XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX.

Boss: asdasdasdasd
Date: XXX, XXXXXXXXX

我想匹配最后 3 行:

这是我正在尝试但失败的方法:

^Boss:.*$^Date:.*$

建议?谢谢

【问题讨论】:

  • 为什么必须使用正则表达式?只需换行即可。
  • +1 @Matt Ball,为什么所有东西看起来都需要用正则表达式锤子敲击?

标签: ruby regex rubular


【解决方案1】:

您可能需要跳过前 x 行...而且您锚 ^ 可能导致您不匹配。

试试

(?:.*[\r\n]*)*Boss:.*(?:.*[\r\n]*)Date:.*

【讨论】:

    【解决方案2】:
    ^Boss:.*[\r\n]+Date:.*$
    

    线锚^$是零宽度断言;他们断言某些条件成立而不消耗任何字符。

    • ^ 表示当前位置要么是输入的开头,要么紧跟在行分隔符之前。
    • $ 表示当前位置是输入的结尾,或者紧跟在行分隔符之后。

    但它们都使用行分隔符,所以$^ 永远无法匹配。 [\r\n]+ 匹配(并使用)一个或多个回车符或换行符,因此它处理三种最常见的行分隔符类型:\r(旧 Mac 标准)、\r\n(Windows/网络标准)和 @ 987654330@(Unix/Linux/Mac OS X/几乎所有其他)。

    【讨论】:

      【解决方案3】:

      如果您的文件大小不在 GB 范围内

      ruby -e 'a=File.read("file"); p a.split(/\n/)[-3..-1] '
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 2018-02-14
        • 2021-06-05
        • 1970-01-01
        相关资源
        最近更新 更多