【问题标题】:Regexp to match only first occurrence starting from top of the text正则表达式仅匹配从文本顶部开始的第一次出现
【发布时间】:2019-04-09 03:32:40
【问题描述】:

我正在提取匹配模式后的特定字符串集,但结果与预期不符。该函数不是从文本文件的顶部开始第一次出现,而是选择最后一次出现。

功能:

[\n\r].*Sent:\s*([^\n\r]*)

示例文本:

发件人:Y 发送时间:2018 年 11 月 6 日星期一上午 6:38 收件人:X

BLA BLA

谢谢,

发件人:X 发送时间:2018 年 11 月 5 日星期一上午 8:38 收件人:Y

你好,BLA

谢谢,

预期结果:

Monday, November 6, 2018 6:38 AM

目前返回:

 Monday, November 5, 2018 8:38 AM

【问题讨论】:

    标签: regex function filter pattern-matching alteryx


    【解决方案1】:

    第一个匹配项不匹配,因为您以 [\n\r] 开始您的正则表达式,它匹配一个换行符并且不存在于您的示例数据的第一行之前。

    要获得匹配项,您可以从开头省略 [\n\r].* 并在末尾添加 To:。如果您不使用全局标志,您将只获得第一次出现,并且您的匹配项在第一个捕获组中。

    Sent:\s*([^\n\r]*) To:
    

    Regex demo

    【讨论】:

      【解决方案2】:

      你已经接近了。试试这个:

      Sent:\s?(.*?)\sTo:
      

      这会寻找'Sent'colon、可选的白色Space,然后它创建Group 1,匹配任意数量的any char,直到找到白色Space和'To:' .

      如果你设置了全局标志,它将匹配两个日期,否则只匹配第一个。

      日期将在Group 1

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 2016-03-18
        • 2022-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多