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

Regexp to match only first occurrence starting from top of the text

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

函数:

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

示例文本:

From: Y Sent: Monday, November 6, 2018 6:38 AM To: X

BLA BLA

Thank you,

From: X Sent: Monday, November 5, 2018 8:38 AM To: Y

Hi Y BLA

Thanks,

预期结果:

Monday, November 6, 2018 6:38 AM

目前returns:

 Monday, November 5, 2018 8:38 AM

你很接近。试试这个:

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

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

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

日期将在 Group 1

第一次出现没有被匹配,因为你用 [\n\r] 开始你的正则表达式,它匹配一个换行符并且不在你的示例数据的第一行之前。

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

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

Regex demo