正则表达式仅匹配从文本顶部开始的第一次出现

时间:2018-11-05 18:24:11

标签: regex function filter pattern-matching alteryx

我正在尝试在匹配模式后提取指定字符串集,但结果不符合预期。该函数不是从文本文件的开头开始出现,而是选择最后一个出现。

功能:

[\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

2 个答案:

答案 0 :(得分:2)

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

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

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

indeterminate values

答案 1 :(得分:1)

您已经关闭。试试这个:

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

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

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

日期将在Group 1中。