在Python中从字符串中分离日期

2024-09-30 22:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个带有未知格式的日期和其他文本的字符串,如何将两者分开?在

>>dparser.parse("monkey 2010-07-10 love banana",fuzzy=True)
datetime.datetime(2010, 7, 10, 0, 0)

fromExtracting date from a string in Python是朝正确方向迈出的一步,但我想要的是非日期文本,例如:

^{pr2}$

如果日期字符串中没有空格,我可以拆分字符串并测试每个子字符串,但是'monkey Feb 20, 2015 loves 2014 bananas'怎么样?20142015都将“pass”parse(),但其中只有一个是日期的一部分。在

编辑:似乎没有任何合理的方法来处理'monkey Feb 20, 2015 loves 2014 bananas'留下{}或{}或{}或parse()可以处理的其他变体。在


Tags: 字符串文本truedatetimeparse格式febfuzzy
2条回答

要在自然语言文本中查找日期/时间并返回它们在输入文本中的位置,从而允许获取非日期文本:

 #!/usr/bin/env python
 import parsedatetime # $ pip install parsedatetime

 cal = parsedatetime.Calendar()
 for text in ['monkey 2010-07-10 love banana',
              'monkey Feb 20, 2015 loves 2014 bananas']:
     indices = [0]
     for parsed_datetime, type, start, end, matched_text in cal.nlp(text) or []:
         indices.extend((start, end))
         print([parsed_datetime, matched_text])
     indices.append(len(text))
     print([text[i:j] for i, j in zip(indices[::2], indices[1::2])])

输出

^{pr2}$

注意:parsedatetime无法将2010-07-10识别为第一个字符串中的日期。2010和{}在两个字符串中都被识别为时间(20:10和{})。在

您可以使用regex来提取单词,对于get-ride-of-month名称,您可以检查字符串是否不在calendar.month_abbrcalendar.month_name中:

>>> import clalendar
>>> def word_find(s):
...       return [i for i in re.findall(r'[a-zA-Z]+',s) if i.capitalize() not in calendar.month_name and i.capitalize() not in calendar.month_abbr]

演示:

^{pr2}$

还有这个:

^{3}$

相关问题 更多 >