正则表达式匹配日期,如月份名称日逗号和年份

时间:2016-02-15 15:58:43

标签: regex

我想知道如何匹配像“2014年10月21日”或“2014年10月21日”这样的日期

到目前为止,我所做的是\b(?:Jan?|?:Feb?|?:Mar?|?:Apr?|?:May?|?:Jun?|?:Jul?|?:Aug?|?:Sep?|?:Oct?|?:Nov?|?:Dec?) [0-9]{1,2}[,] (?:19[7-9]\d|2\d{3})(?=\D|$),但这并没有让我任何地方

  • 总之,我需要我的匹配字符串:“月[空格]日[逗号] [空格]年” 我不关心闰年,月份的日期应该是1到31之间的任何东西,没有前导0
  • 我需要这个正则表达式来处理python

2 个答案:

答案 0 :(得分:16)

可能足以满足您的需求。

请注意,您需要更复杂的验证,例如验证特定月份的天数(例如,2月份最多只能持续28天(未来几年为29天),等等)

{{1}}

使用它here

同样,这绝对是一个非常简单的正则表达式,你必须有更多更好的解决方案,但也许这可能足以满足你的需求,我不知道。

答案 1 :(得分:0)

next 可用于使用 python 的月份字符串中有错误的日期:

"".join((re.compile('(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\.)?(\w*)?(\.)?(\s*\d{0,2}\s*),(\s*\d{4})', re.S + re.I).findall('Some wrong date is Septeme 28, 2002date') + ['n/a'])[0])

输出为:

'Septeme 28 2002'

1组是月星:

(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)

2-4 组是可选的月份后缀,可以包含点或字母数字字符:

(\.)?(\w*)?(\.)?

它匹配 Sep.Sept.Septem 中的 .t. tem

5 组是日期编号,可以是也可以不是,所以表达式中的 0 代表没有日期编号的日期:

(\s*\d{0,2}\s*)

6组是一年:

(\s*\d{4})

\s* 代表从 0 到多个可能的“空”字符(空格、制表符等)

[0] 如果列表中有几个日期元组,则采用第一个匹配

如果没有日期匹配,可以将

+ ['n/a'] 添加为附加列表元素,因此列表中至少会存在 1 个元素,并且当 [0] 元素为被带走