我是Python新手,遇到以下字符串时出现问题:
立即订购,于4月25日星期二免费送货或订购 珠宝于4月29日星期二举行。
我已将其转换为.split()
的字符串列表。但是,我无法弄清楚如何遍历列表以提取日期,如4月25日和4月29日。一旦我将这些字符串拉出来,我知道我可以将它们转换为datetime.strptime(string, '%B %d')
的日期格式{ {1}}正在" 4月25日"和#34; 4月29日"并且可以应用日期差异功能。
我认为我需要将包含月份名称的列表元素作为字符串,并将下一个元素与月份中的日期相结合,以便将它们转换为日期格式。
非常感谢任何帮助。先感谢您。
答案 0 :(得分:2)
赞美正则表达式的力量:
import re
from datetime import datetime
s = "Order now for free delivery loose on Tuesday, April 25 or set in jewelry on Tuesday, April 29."
# regex looking for dates in the given format
rx = re.compile(r'''
(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day),\s+
(?:January|February|March|April|May|June|July|August|September|October|November|December)\s+
\d+
''', re.VERBOSE)
dates = [datetime.strptime("{} #{}".format(m.group(0), "2017"), '%A, %B %d #%Y')
for m in rx.finditer(s)]
print(dates)
# [datetime.datetime(2017, 4, 25, 0, 0), datetime.datetime(2017, 4, 29, 0, 0)]
答案 1 :(得分:1)
如果它适用于当前的 2017 年,则解决方案使用
calendar.day_name(一周中的几天),
calendar.month_name(一年中的几个月)和datetime.strptime()功能:
import calendar, datetime
s = 'Order now for free delivery loose on Tuesday, April 25 or set in jewelry on Tuesday, April 29'
day_names = '|'.join(list(calendar.day_name)) # Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
month_names = '|'.join(list(calendar.month_name[1:]))
dates = re.findall(r'((' + day_names + '), (' + month_names + ') \d{1,2})', s)
datetimes = [datetime.datetime.strptime(d[0] + ' 2017', '%A, %B %d %Y') for d in dates]
print(datetimes)
输出:
[datetime.datetime(2017, 4, 25, 0, 0), datetime.datetime(2017, 4, 29, 0, 0)]