1

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

功能:

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

示例文本:

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

布拉布拉

谢谢,

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

嗨 Y BLA

谢谢,

预期成绩:

Monday, November 6, 2018 6:38 AM

目前返回:

 Monday, November 5, 2018 8:38 AM
4

2 回答 2

2

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

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

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

正则表达式演示

于 2018-11-05T20:33:43.397 回答
1

你很近。尝试这个:

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

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

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

日期将在Group 1.

于 2018-11-05T18:52:22.147 回答