You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:40:55