Python从字符串中提取不同格式的日期

Sam*_* S. 5 python string date extract python-dateutil

我尝试包 dateutil 从字符串中提取日期部分。如果字符串中包含确切的日期,则效果很好,例如:

from dateutil.parser import parse
try: 
    date = parse(string, fuzzy=True)
    print(str(date)[:10])
except ValueError:
    print("no date in text")

string = "an example of date:8 march 2019"
output: 2019-03-08

string = "an example of date: 2019/3/8"
output: 2019-03-08

string = "an example of pure string"
output: no date in text
Run Code Online (Sandbox Code Playgroud)

但是,当字符串中包含数字而不是日期时,就会出错并将其视为日期:

string = "an example of wrong date: 8"

output: 2022-03-08
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何使用这个包或类似的包来解决这个问题。有一些与提取日期相关的帖子,例如Extract date from string in python,但它们没有涵盖这个主题,并且它们适用于特定的日期格式。

非常感谢您的帮助!

sop*_*ros 2

看来您想利用dateutil模块解析自由格式日期的强大能力,但它尝试解析的默认日期种类和默认规范化规则(在日期中丢失时使用当前月/年)不是你需要什么。

您可以做的事情之一是,如果该值可解析为整数值,或者要解析的字符串中没有数字,则不要尝试将该值解析为日期。dateutil

因此,我建议满足这两个先决条件(您可以扩展列表,从而消除dateutil您案例中的默认误解):

import re
from dateutil.parser import parse
try: 
    v = int(string)
    print("Seems like integer.")
except ValueError:  # requires that the date does not parse as proper int
    if re.search( r'\d', string) is not None:  # requires a digit in the string 
        try:
           date = parse(string, fuzzy=True)
           print(str(date)[:10])
        except ValueError:
           print("no date in text")
    else:
        print("Can't parse")
Run Code Online (Sandbox Code Playgroud)