我想知道如何匹配像“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|$)
,但这并没有让我任何地方
答案 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] 元素为被带走