当输入句子包含文章时,dateutil 模糊解析中断 'a'

dateutil fuzzy parsing breaks when the input sentence contains the article 'a'

我正在寻找一种从字符串中提取日期信息的方法。在阅读了另一个 SO 线程 (Extracting date from a string in Python) 后,似乎 python-dateutil 是一个理想的解决方案。它有一个模糊解析方法,能够从任何字符串中提取日期信息:

具体方法是

dateutil.parser.parse('your string here', fuzzy=True)

这适用于许多类型的包含日期的输入字符串,但我注意到当输入字符串包含确定符 'a' 时,此方法完全失效,如

之类的句子
dateutil.parser.parse('a monkey on March 1, 2015', fuzzy=True)
dateutil.parser.parse("I ate a sandwich on March 1",fuzzy=True)

这都会导致错误:

ValueError: Unknown string format

有人知道好的解决方法吗?为什么 dateutil.parser 在输入包含文章 "a" 时中断?

不确定这是否是一个好的解决方法,但是使用 python-dateutil < 2.4:

没有错误
>>> from dateutil.parser import parse
>>> parse('a monkey on March 1, 2015', fuzzy=True)
datetime.datetime(2015, 3, 1, 0, 0)
>>> parse("I ate a sandwich on March 1",fuzzy=True)
datetime.datetime(2015, 3, 1, 0, 0)
>>> dateutil.__version__
'2.3'

仅供参考,这是我使用 2.4(当前最新)得到的结果:

>>> from dateutil.parser import parse
>>> parse('a monkey on March 1, 2015', fuzzy=True)
Traceback (most recent call last):
    ...
    raise ValueError("Unknown string format")
ValueError: Unknown string format

考虑通过在 dateutil bug tracker 中创建一个新问题来报告问题。

看起来 2.4 中的问题是由于在 "a" 匹配 AM 而没有对应的小时时触发了 ValueError。

在 2.3 及以下版本中,不会触发此类异常。