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,但它们没有涵盖这个主题,并且它们适用于特定的日期格式。
非常感谢您的帮助!
看来您想利用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)