import re
exp1="2018-7-12 13:00:00"
exp2="13:00:00 2018-7-12"
reg= r'\d\d\d\d[./-](0?[1-9]|1[0-2])[./-](0?[1-9]|[12][0-9]|3[01]) (00|[0- 9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])'
compDate = re.search(reg,exp1)
我还尝试了超前表达式,但是它们无法使它们正常工作。
欢迎使用其他解决方案
答案 0 :(得分:5)
我建议避免使用正则表达式来尝试从字符串中提取日期。如果知道了可能的格式数目,则只需尝试转换为datetime
对象。如果转换失败,请尝试下一种可能的格式。
例如:
from datetime import datetime
test_dates = ["2018-7-12 13:00:00", "13:00:00 2018-7-12"]
date_formats = ["%Y-%m-%d %H:%M:%S", "%H:%M:%S %Y-%m-%d"]
for date in test_dates:
for date_format in date_formats:
try:
dt = datetime.strptime(date, date_format)
print(dt)
except ValueError as e:
pass
这样做的好处是可以跳过诸如2018-09-31
之类的非法日期,并且可以正确处理leap年。它也很容易遵循。
答案 1 :(得分:1)
这里不需要正则表达式,可以,但是使用datetime
更容易:
from datetime import datetime
l = ["2018-7-12 13:00:00", "13:00:00 2018-7-12"]
l2 = ["%Y-%m-%d %H:%M:%S", "%H:%M:%S %Y-%m-%d"]
print([str(datetime.strptime(x,y)) for x,y in zip(l,l2)])
输出:
['2018-07-12 13:00:00', '2018-07-12 13:00:00']