此日期需要正则表达式模式

Need Regex pattern for this Date

我有这样的日期字符串

  Date: April 1st, 2015
  Date: March 31st, 2015
  Date: March 26th, 2015

我需要提取适合 python 日期时间模式的日期。 我将 '%B %d %Y' 作为 python 日期时间模式。

那么我怎样才能将上面的字符串提取为日期时间格式。 正则表达式输出应为:

March 31 2015
August 1 2014

请帮助我构建漂亮的正则表达式模式。

^.*?:\s*|[a-zA-Z]+,

您可以为此使用 re.sub 并替换为 empty string。参见演示。

https://regex101.com/r/sJ9gM7/42#python

import re
p = re.compile(r'^.*?:\s*|[a-zA-Z]+,', re.MULTILINE | re.IGNORECASE)
test_str = " Date: April 1st, 2015\n Date: March 31st, 2015\n Date: March 26th, 2015"
subst = ""

result = re.sub(p, subst, test_str)

您可以使用 datetime.datetime.strptimestrftime :

>>> d=datetime.datetime.strptime('April 1 2015','%B %d %Y')
datetime.datetime(2015, 4, 1, 0, 0)

>>> d.strftime('%B %d %Y')
'April 01 2015'

尝试这样的事情:

Date:\s*(\w+)\s*(\d+)\w+,\s*(\d+)

这会将日期的每个元素放入后续捕获的参数 (1, 2, 3) 中,可通过 x.group(n) 语法获得。

>>> ' '.join(re.match(r'Date:\s*(\w+)\s*(\d+)\w+,\s*(\d+)', 'Date: April 1st, 2015').groups())
'April 1 2015'

我会怎么做:

date = 'Date: April 1st, 2015'
import re
regex = re.search(
    r'Date:\s([A-Z]{1}[a-z]*)\s([0-9]{1,2})[a-z]{2},\s([0-9]{4})',
    date,
)
parsed_date = ' '.join(regex.groups())
from datetime import datetime
date_time = datetime.strptime(parsed_date, '%B %d %Y')

print date_time
#output
'2015-04-01 00:00:00'

现在就把它放在一起,然后用日期做点什么;-)