首页 > 解决方案 > 正则表达式在单词之前查找日期

问题描述

我正在尝试编写一个 RegEx 语句来定位特定单词之前的第一个日期。

我使用下面的正则表达式来显示特定单词之后的第一个日期。

字 +\K(?:([0-9]+)/([0-9]+)/([0-9]+)|((0?[1-9]|1[0-2] )-(0?[1-9]|[12]\d|3[01])-(\d{4}|\d{2}))|\w+\s\d{2},\s \d{4}|(?i)\b(Jan(?:uary|.)?|Feb(?:ruary|.)?|Mar(?:ch|.)?|Apr(?:il|. )?|五月|六月(?:e|.)?|七月(?:y|.)?|八月(?:ust|.)?|九月(?:tember|.)?|十月(?:ober |.)?|Nov(?:ember|.)?|Dec(?:ember|.)?)( ,?[ ]|-(?:0?[1-9]|[1-2][0 -9]|3[01])-)(\d{4}))

这是我希望它返回的示例。

这里有很多词 01/07/2019 02/03/2019 02/08/2019更多词在这里。在这种情况下,它应该返回日期 02/08/2019。如何更改上述语句以在指定单词之前找到日期?

我使用 Notepad ++ 来测试这是否有助于确定我使用的 RegEx 类型。

奖励问题:有时要匹配的单词可能会换行。正则表达式仍然可以匹配吗?例如,它的格式可能如下所示,其中“更多”一词位于新行上:

Many words here 
01/07/2019 
02/03/2019 
02/08/2019 
More words here

标签: regex

解决方案


您可以在日期结束时使用积极的前瞻(?=\h+More\b)模式来断言接下来的内容是水平空白字符的 1+ 倍,Word然后是单词边界。

(?:([0-9]+)/([0-9]+)/([0-9]+)|((0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])-(\d{4}|\d{2}))|\w+\s\d{2},\s\d{4}|(?i)\b(Jan(?:uary|.)?|Feb(?:ruary|.)?|Mar(?:ch|.)?|Apr(?:il|.)?|May|Jun(?:e|.)?|Jul(?:y|.)?|Aug(?:ust|.)?|Sep(?:tember|.)?|Oct(?:ober|.)?|Nov(?:ember|.)?|Dec(?:ember|.)?)( ,?[ ]|-(?:0?[1-9]|[1-2][0-9]|3[01])-)(\d{4}))(?=\h+More\b)

正则表达式演示

如果单词可以在换行符上,您可以更改\h\s

正则表达式演示


推荐阅读