【问题标题】:RegEx - extracting text between phrases using GROKRegEx - 使用 GROK 提取短语之间的文本
【发布时间】:2019-02-05 12:44:36
【问题描述】:

我正在尝试使用 RegEx 来捕获两个“标签”之间的一些信息。 示例:一些文本和一些文本 错误消息:找不到 http 404 程序:一些文本一些文本

我需要分析整个字段,找到短语“错误消息:”和“程序:”并捕获它们之间的内容,在本例中为“找不到 http 404”。我只需要显示标签之间的文本,不需要显示标签。

我使用 RegEx 和 Grok 尝试了很多东西,但我的尝试都没有成功。

有谁知道我可以如何做到这一点?

非常感谢!

【问题讨论】:

    标签: regex grok phrase


    【解决方案1】:
    @capture = $text =~ m/(Error message:)(.*?)(Procedures:)/s;
    $capture = join '', @capture;
    $capture =~ s/<.*?>//g;
    

    只需捕获它,将其保存在数组中,然后随心所欲地使用它...在这里我将匹配项转换回字符串,因此我可以应用另一个正则表达式,它会删除标签。您当然可以在每个数组的索引上应用这种替换正则表达式。

    希望这段代码没有错误,我没有编译它,如果你使用与 perl 5 不同的语言,希望你能找到它的替代方案。

    【讨论】:

      【解决方案2】:

      正如您还要求提供 Grok 模式,我考虑提交另一个答案。在这种情况下,我的解决方案基于 grok 模式,使用正则表达式匹配不相关的部分,包括预期标签的末尾或开头。解决办法是:

      (?<notImportant1>[A-Za-z ]* Error message:) (?<textBetweenTags>[A-Za-z0-9 ]*) (?<notImportant2>Procedures: [A-Za-z ]*)
      

      它会为你提供类似的东西:

      • notImportant1:一些文字和一些文字错误消息:
      • textBetweenTags:未找到 http 404
      • notImportant2:程序:一些文本一些文本

      在这里,您已将您感兴趣的子字符串提取为“textBetweenTags”。意识到如果标签之前或之后的文本包含数字或其他符号,则正则表达式应该更改。

      编辑:顺便说一句,不知道您是否知道该工具,但您可以测试模式here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多