用于从python中的字符串中提取所有复杂日期格式的正则表达式

Ami*_*rma 4 python regex date

我有以下字符串:

 dateEntries = "04-20-2009; 04/20/09; 4/20/09; 4/3/09; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009; 20 Mar 2009; 20 March 2009; 2 Mar. 2009; 20 March, 2009; Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009; Feb 2009; Sep 2009; Oct 2010; 6/2008; 12/2009; 2009; 2010"
Run Code Online (Sandbox Code Playgroud)

在这里,我想使用regex. 作为尝试,我写了以下内容regex

import re

regEx = r'(?:\d{1,2}[-/th|st|nd|rd\s]*)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z\s,.]*(?:\d{1,2}[-/th|st|nd|rd)\s,]*)?(?:\d{2,4})'

re.findall(regEx, dateEntries)
Run Code Online (Sandbox Code Playgroud)

我期待这能工作,但它只返回日期的子集。

A = ['Mar 20, 2009',
 'March 20, 2009',
 'Mar. 20, 2009',
 'Mar 20 2009',
 '20 Mar 2009',
 '20 March 2009',
 '2 Mar. 2009',
 '20 March, 2009',
 'Mar 20th, 2009',
 'Mar 21st, 2009',
 'Mar 22nd, 2009',
 'Feb 2009',
 'Sep 2009',
 'Oct 2010']
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不返回日期:

B=[04-20-2009; 04/20/09; 4/20/09; 4/3/09; 6/2008; 12/2009; 2009; 2010"]
Run Code Online (Sandbox Code Playgroud)

regEx通过扩展r'(?:\d{1,2}[-\s\/])?(?:\d{1,2}[-\/\s])?(?:\d{2,4})'适用于 B 组的 来创建 。但regEx无法产生A+B

任何人都可以帮助制作一个正则表达式来提取我的所有日​​期dateEntries吗?

注意:我只想使用正则表达式来解决这个问题。

Nil*_*ter 5

您只是?在该(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)组之后缺少一个单曲以将其标记为不需要。此外,我+在最后两个组后面添加了一个,以确保正则表达式不会将“2009 年 3 月 20 日”之类的日期拆分为两个不同的日期。

完整代码:

import re

regEx = r'(?:\d{1,2}[-/th|st|nd|rd\s]*)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)?[a-z\s,.]*(?:\d{1,2}[-/th|st|nd|rd)\s,]*)+(?:\d{2,4})+'

dateEntries = "04-20-2009; 04/20/09; 4/20/09; 4/3/09; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009; 20 Mar 2009; 20 March 2009; 2 Mar. 2009; 20 March, 2009; Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009; Feb 2009; Sep 2009; Oct 2010; 6/2008; 12/2009; 2009; 2010"
result = re.findall(regEx, dateEntries)
print(result)
Run Code Online (Sandbox Code Playgroud)

如果您的日期有前导空格,则结果也将有前导空格。如果您继续使用日期字符串,您可以使用该方法删除它们.strip()