正则表达式可以在单词之前找到日期

时间:2019-06-06 18:35:02

标签: regex

我正在尝试编写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 |。) ?| 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}))

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

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

我使用记事本++进行测试是否有助于确定我使用的RegEx类型。

奖金问题:有时匹配的单词可能在新的一行。正则表达式仍然可以匹配吗?例如,它的格式可能如下所示,其中“ More”在换行符上。

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

1 个答案:

答案 0 :(得分:2)

您可以在日期结束时使用正向前瞻(?=\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)

Regex demo

如果单词可以换行,则可以将\h更改为\s

Regex demo