首页 > 解决方案 > RegEx 匹配多种日期格式

问题描述

我有以下 RegEx 语句,它将返回匹配月、日和年的日期格式(例如 2001 年 1 月 1 日)

[12]\d|3[01]))|\w+\s\d{2},\s\d{4}

我想修改它以包含缩写月份中的匹配项,并且在第二天有或没有逗号。因此,例如匹配将包括以下内容:

Jan 01 2001

Jan 01, 2001

January 01 2001

January 01, 2001

我相信我有下面需要的部分内容,但我似乎无法将它们放在一起。任何帮助,将不胜感激。

(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)

标签: regex

解决方案


你在正确的轨道上。需要什么:

  • 将捕获组转为非捕获组
  • \b在单词之前和之后添加单词边界
  • 将数字范围与(?:0[1-9]|[1-2][0-9]|3[01])
  • 匹配可选的逗号,?,后跟空格
  • 锚点在字符串的开头^和结尾$

您可以使用:

^\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b (?:0[1-9]|[1-2][0-9]|3[01]),? \d{4}$

正则表达式演示在这里


如评论中所述,如果需要不区分大小写(?i),请在模式开头添加选项。如果模式在更大的字符串中,只需删除锚点:

(?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)?)\b (?:0[1-9]|[1-2][0-9]|3[01]),? \d{4}

正则表达式演示在这里


顺便说一句,对于诸如Juneor之类的月份July,您可以分别简单地使用June?andJuly?而不是Jun(?:e)?and Jul(?:y)?


推荐阅读