正则表达式仅匹配从文本顶部开始的第一次出现
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:
我正在努力在匹配模式后提取特定字符串集,但结果与预期不符。该函数不是从文本文件的顶部开始第一次出现,而是选择最后一次出现。
函数:
[\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: