在Python中将日期与字符串分开

时间:2015-02-21 12:24:22

标签: python string date

如果字符串中包含未知格式和其他文本的日期,我该如何将它们分开?

>>dparser.parse("monkey 2010-07-10 love banana",fuzzy=True)
datetime.datetime(2010, 7, 10, 0, 0)
来自Extracting date from a string in Python

是朝着正确方向迈出的一步,但我想要的是非日期文本,例如:

date = 2010-07-10
str_a = 'monkey', str_b = 'love banana'

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

编辑:似乎没有任何合理的方式来处理'monkey Feb 20, 2015 loves 2014 bananas'因为事情解析()可以处理'monkey Feb 20, 2015 loves bananas''monkey 2/20/2015 loves bananas''monkey 20 Feb 2015 loves 2014 bananas'或其他变体用。

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来提取单词,并且为了获取月份名称,您可以检查您的字符串不在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]

演示:

>>> s1='monkey Feb 20, 2015 loves 2014 bananas'
>>> s2='monkey Feb 20, 2015 loves bananas'
>>> s3='monkey 2/20/2015 loves bananas'
>>> s4='monkey 20 Feb 2015 loves 2014 bananas'
>>> print word_find(s1)
['monkey', 'loves', 'bananas']
>>> print word_find(s2)
['monkey', 'loves', 'bananas']
>>> print word_find(s3)
['monkey', 'loves', 'bananas']
>>> print word_find(s4)
['monkey', 'loves', 'bananas']

和此:

>>> s5='monkey 20 January 2015 loves 2014 bananas'
>>> print word_find(s5)
['monkey', 'loves', 'bananas']

答案 1 :(得分:0)

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

 #!/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])])

输出

[datetime.datetime(2015, 2, 21, 20, 10), '2010']
['monkey ', '-07-10 love banana']
[datetime.datetime(2015, 2, 20, 0, 0), ' Feb 20, 2015']
[datetime.datetime(2015, 2, 21, 20, 14), '2014']
['monkey', ' loves ', ' bananas']

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