我分析了形如19920203、199203、1992.02.03、1992.02、1992-02-03、1992-02、920203時間格式特征,列出了正則表達式如下:
代碼如下:
^((?:19|20)?/d{2})[-.]?((?:[0-1]?|1)[0-9])[-.]?((?:[0-3]?|[1-3])[0-9])?$
當然這個表達式還不是很完善,只能做簡單的切割,不能判斷日期的合法性,關于日期是否合法,我還是交給Python的時間功能來處理吧。
根據上面的正則表達式,我寫的DateParser類如下:
代碼如下:
import re
import datetime
# ***************************************************
# *
# * Description: 非標準的日期字符串處理
# * Author: wangye <pcn88 at hotmail dot com>
# *
# ***************************************************
class DateParser(object):
def __init__(self):
self.pattern = re.compile(
r'^((?:19|20)?/d{2})[-.]?((?:[0-1]?|1)[0-9])[-.]?((?:[0-3]?|[1-3])[0-9])?$'
)
def __cutDate(self, date, flags):
y = date.year
m = date.month if flags[1] else 1
d = date.day if flags[2] else 1
return datetime.date(y, m, d)
def __mergeFlags(self, flags1, flags2):
l = []
length = min(len(flags1), len(flags2))
for i in range(0, length):
if flags1[i] and flags2[i]:
l.append(True)
else:
l.append(False)
return l
def parse(self, strdate):
"""
描述:時間解析方法。
參數:strdate 要分析的時間字符串,比如目標時間類型datetime(1992, 2, 3)
可以被解析的是下述字符串之一:
19920203
199203
1992.02.03
1992.02
1992-02-03
1992-02
新聞熱點
疑難解答