2008-12-04 20 views

回答

2

使用結束的3個字,沒有必要對正則表達式(使用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) 
>>> 
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) 
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")