Python:从字符串中提取两个日期

时间:2018-05-03 13:59:38

标签: python regex string

我有一个字符串s = "o4_24d_20170708_20170801",其中包含两个日期,我正在尝试提取这两个日期,以便相互减去它们以计算它们之间的天数。最后,我的目标是得到一个这样的字符串:import re, datetime s = "o4_20170708_20170801" match = re.search('\d{4}\d{2}\d{2}', s) date = datetime.datetime.strptime(match.group(), '%Y%m%d').date() print date

在我工作的公司,我们无法安装其他软件包,因此我正在寻找使用本机python的解决方案。以下是我到目前为止使用的datetime包,它只提取一个日期:如何从字符串中获取两个日期?

String

2 个答案:

答案 0 :(得分:3)

from datetime import datetime
import re

s = "o4_20170708_20170801"
pattern = re.compile(r'(\d{8})_(\d{8})')
dates = pattern.search(s)
# dates[0] is full match, dates[1] and dates[2] are captured groups
start = datetime.strptime(dates[1], '%Y%m%d')
end = datetime.strptime(dates[2], '%Y%m%d')
difference = end - start

print(difference.days)

将打印

24

然后,您可以执行以下操作:

days = 'd{}_'.format(difference.days)
match_index = dates.start()
new_name = s[:match_index] + days + s[match_index:]
print(new_name)

获取

o4_d24_20170708_20170801

答案 1 :(得分:0)

import re, datetime
s = "o4_20170708_20170801"
match = re.findall('\d{4}\d{2}\d{2}', s)
for a_date in match:
  date = datetime.datetime.strptime(a_date, '%Y%m%d').date()
  print date

这将打印:

2017-07-08
2017-08-01

您的正则表达式在regexpal

处正常运行