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

时间:2015-04-02 06:03:26

标签: python regex regex-negation python-datetime

我有日期字符串,如

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

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

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

March 31 2015
August 1 2014

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

4 个答案:

答案 0 :(得分:1)

^.*?:\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)

答案 1 :(得分:1)

尝试这样的事情:

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'

答案 2 :(得分:0)

您可以使用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'

答案 3 :(得分:0)

我将如何做到:

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'

现在只是把它放在一个情绪中并用日期做一些事情; - )