【问题标题】:How to extract date from a python string如何从python字符串中提取日期
【发布时间】:2019-09-26 14:30:20
【问题描述】:

我想使用 python 的 dateutil 包从 string 中提取 datedate 有不同的格式,但dateday 部分在这些string 中的任何一个中都不存在。

Month 以字母形式写在year 之前,如Sep 2016,但在写为数字时,year 成功,如2016-09201609

import dateutil.parser as dparser
print(dparser.parse("The file is for month Sep 2016.",fuzzy=True).month)
   9
print(dparser.parse("The file is for month Sept-2016.",fuzzy=True).month)
   9
print(dparser.parse("The file is for month 2016-09.",fuzzy=True).month)
   9

如下图yearmonth之间没有连字符-时如何处理-

print(dparser.parse("The file is for month 201609.",fuzzy=True).month)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-123-566e083c8313> in <module>()
----> 1 dparser.parse("The file is for month 201609.",fuzzy=True).month

~\AppData\Local\Continuum\anaconda3\lib\site-packages\dateutil\parser.py in parse(timestr, parserinfo, **kwargs)
   1180         return parser(parserinfo).parse(timestr, **kwargs)
   1181     else:
-> 1182         return DEFAULTPARSER.parse(timestr, **kwargs)
   1183 
   1184 

这个库中是否有这样做的选项?

【问题讨论】:

    标签: python date python-dateutil


    【解决方案1】:

    如果您不介意使用外部包,一个完全不同的解决方案是使用 dateparser (https://pypi.org/project/dateparser/),它可以解析多种格式的日期(甚至包括一些 NLP 功能)

    否则,您可以使用正则表达式提取此日期格式(例如“[0-9]{6}”),然后将年份与月份分开。这仅适用于年份在月份之前的情况。

    【讨论】:

    • 你能提供一些例子来证明它可以和dateparser一起工作吗?
    • 您可以使用该模块:从 dateparser.search import search_dates 然后将您的字符串传递给 search_dates 以及所需的设置(例如 search_dates("The file is for month Sept-2016.", settings={"PREFER_DAY_OF_MONTH": "first"}) PREFER_DAY_OF_MONTH 设置为 first 因为缺少日期并且 dateparser将始终返回一个完整的日期。
    • 嗯,问题出在 2016-09 或 201609 之类的格式上。它不起作用。
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多