我正在尝试在匹配模式后提取指定字符串集,但结果不符合预期。该函数不是从文本文件的开头开始出现,而是选择最后一个出现。
功能:
[\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
答案 0 :(得分:2)
第一个匹配项不匹配,因为您以[\n\r]
开始了正则表达式,该匹配项与换行符匹配,并且不在示例数据的第一行之前。
要获得匹配,您可以从开头省略[\n\r].*
,在末尾添加To:
。如果您不使用全局标志,则只会获得第一个匹配项,并且您的匹配项位于第一个捕获组中。
Sent:\s*([^\n\r]*) To:
答案 1 :(得分:1)
您已经关闭。试试这个:
Sent:\s?(.*?)\sTo:
这会寻找'Sent'
,colon
,可选的白色Space
,然后创建Group 1
,匹配任意数量的any char
,直到达到白色Space
和'To:
'。
如果设置了全局标志,它将匹配两个日期,否则将匹配第一个。
日期将在Group 1
中。