使用Python dateutil库提取多日期遇格式异常的求助
提取文本中多个日期的可行方法
你的代码里用的dparser.parse是用来解析整个字符串为单个日期的方法,不是批量提取多个日期的工具,所以当文本包含多个日期和无关内容时,即便开启fuzzy=True也容易解析失败,出现你遇到的格式错误。
下面是两种可行的批量提取方法:
方法一:使用dateutil的findall方法(推荐)
如果你的dateutil版本≥2.8.0,直接用parser.findall就能提取文本中所有日期,无需额外处理:
import dateutil.parser as dparser from datetime import datetime text = 'First date is 10 JANUARY 2000 and second date is 31/3/2000' # 提取所有日期 all_dates = list(dparser.findall( text, dayfirst=True, default=datetime(1800, 1, 1) )) print(all_dates) # 输出:[datetime.datetime(2000, 1, 10, 0, 0), datetime.datetime(2000, 3, 31, 0, 0)]
方法二:正则提取+逐个解析
如果dateutil版本较低,先通过正则匹配出文本中所有疑似日期的片段,再用dparser.parse逐个解析:
import re import dateutil.parser as dparser from datetime import datetime text = 'First date is 10 JANUARY 2000 and second date is 31/3/2000' # 定义匹配常见日期格式的正则,可根据实际需求扩展 date_patterns = [ r'\b\d{1,2}\s+[A-Za-z]+\s+\d{4}\b', # 匹配DD MONTH YYYY格式 r'\b\d{1,2}/\d{1,2}/\d{4}\b' # 匹配DD/MM/YYYY格式 ] all_dates = [] for pattern in date_patterns: # 找出所有匹配的片段 date_strings = re.findall(pattern, text) for date_str in date_strings: try: dt = dparser.parse(date_str, dayfirst=True, default=datetime(1800, 1, 1)) all_dates.append(dt) except ValueError: # 跳过解析失败的片段 continue print(all_dates) # 输出:[datetime.datetime(2000, 1, 10, 0, 0), datetime.datetime(2000, 3, 31, 0, 0)]
内容的提问来源于stack exchange,提问作者CPD
相关产品推荐
相关产品推荐

