我有日期字符串,如
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
请帮我构建漂亮的正则表达式。
答案 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.strptime
和strftime
:
>>> 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'
现在只是把它放在一个情绪中并用日期做一些事情; - )