从Python中的string中提取date

我怎样才能从一个像“猴子2010-07-10爱香蕉”string中提取date? 谢谢!

如果date以固定格式给出,则可以简单地使用正则expression式来提取date和“datetime.datetime.strptime”来parsingdate:

match = re.search(r'\d{4}-\d{2}-\d{2}', text) date = datetime.strptime(match.group(), '%Y-%m-%d').date() 

否则,如果date以任意forms给出,则无法轻松提取。

使用python-dateutil :

 In [1]: import dateutil.parser as dparser In [18]: dparser.parse("monkey 2010-07-10 love banana",fuzzy=True) Out[18]: datetime.datetime(2010, 7, 10, 0, 0) 

无效date引发ValueError

 In [19]: dparser.parse("monkey 2010-07-32 love banana",fuzzy=True) # ValueError: day is out of range for month 

它可以识别多种格式的date:

 In [20]: dparser.parse("monkey 20/01/1980 love banana",fuzzy=True) Out[20]: datetime.datetime(1980, 1, 20, 0, 0) 

请注意,如果date不明确,则会进行猜测:

 In [23]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True) Out[23]: datetime.datetime(1980, 10, 1, 0, 0) 

但是它parsing模糊date的方式是可定制的:

 In [21]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True, dayfirst=True) Out[21]: datetime.datetime(1980, 1, 10, 0, 0) 

用于从Python中的string中提取date; 最好的模块是datesearch模块。

您可以按照下面的简单步骤在Python项目中使用它。

第1步:安装datefinder包

 pip install datefinder 

第2步:在您的项目中使用它

 import datefinder input_string = "monkey 2010-07-10 love banana" # a generator will be returned by the datefinder module. I'm typecasting it to a list. Please read the note of caution provided at the bottom. matches = list(datefinder.find_dates(input_string)) if len(matches) > 0: # date returned will be a datetime.datetime object. here we are only using the first match. date = matches[0] print date else: print 'No dates found' 

注意:如果你期待大量的比赛, 那么types转换列表将不会是一个推荐的方式,因为它会有一个很大的性能开销。