我如何从这样的模式中解脱出来?

时间:2008-12-04 08:10:19

标签: python regex datetime

我需要在文本上使用datetime.strptime,如下所示。

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

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您可能会发现this问题很有用。我会给出我在那里给出的答案,即使用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)

答案 1 :(得分:3)

不要尝试使用strptime来捕获非日期文本。为了获得良好的模糊匹配,dateutil.parser很棒,但是如果您知道日期的格式,可以使用正则表达式在字符串中查找日期,然后使用strptime将其转换为日期时间对象,如下所示: / p>

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")

答案 2 :(得分:2)

使用结尾3个字,不需要regexps(使用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)
>>>