如何从这样的模式中使用strptime?

3 投票
3 回答
2121 浏览
提问于 2025-04-11 20:46

我需要用 datetime.strptime 这个方法来处理一些文本,文本的格式大概是这样的:

“一些随机的、不确定长度的文本 1986年1月28日”

我该怎么做呢?

3 个回答

3

不要试着用strptime来提取非日期的文本。如果你想要更灵活的匹配,dateutil.parser是个不错的选择。不过,如果你已经知道日期的格式,可以用正则表达式在字符串中找到日期,然后再用strptime把它转换成日期时间对象,像这样:

import datetime
import re

pattern = "((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]+, [0-9]+)"
datestr = re.search(, s).group(0)
d = datetime.datetime.strptime(datestr, "%b %d, %Y")
4

你可能会觉得这个问题很有用。我在那里的回答是使用dateutil模块。这个模块有一个模糊参数,可以忽略任何看起来不像日期的文本。也就是说:

>>> from dateutil.parser import parse
>>> parse("Some Random text of undetermined length Jan 28, 1986", fuzzy=True)
datetime.datetime(1986, 1, 28, 0, 0)
2

使用最后的三个词,不需要正则表达式(可以用 time 模块):

>>> import time
>>> a="Some Random text of undetermined length Jan 28, 1986"
>>> datetuple = a.rsplit(" ",3)[-3:]
>>> datetuple
['Jan', '28,', '1986']
>>> time.strptime(' '.join(datetuple),"%b %d, %Y")
time.struct_time(tm_year=1986, tm_mon=1, tm_mday=28, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=28, tm_isdst=-1)
>>> 

使用 datetime 模块:

>>> from datetime import datetime
>>> datetime.strptime(" ".join(datetuple), "%b %d, %Y")
datetime.datetime(1986, 1, 28, 0, 0)
>>> 

撰写回答