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

如何为字符串中的日期补零使月份为2位 解决dateutil解析报错

问题说明

现有两种带冗余后缀的日期字符串:

  • 2位月份格式:bd1 = '05/27/2018 SW1604-3'
  • 1位月份无补零格式:bd2 = '9/16/2021 SU1'

使用dateutil.parser的模糊解析模式提取日期时,2位月份的字符串可以正常解析,执行代码与返回结果如下:

>>> import dateutil.parser as dparser
>>> str(dparser.parse(bd1,fuzzy=True)).split(" ")[0]
'2018-05-27'

但解析1位月份的字符串时会抛出ParserError,报错信息如下:

>>> import dateutil.parser as dparser 
>>> str(dparser.parse(bd2,fuzzy=True)).split(" ")[0] 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Noah Siegel\.conda\envs\webvitals\lib\site-packages\dateutil\parser\_parser.py", line 1368, in parse  
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "C:\Users\Noah Siegel\.conda\envs\webvitals\lib\site-packages\dateutil\parser\_parser.py", line 643, in parse   
    raise ParserError("Unknown string format: %s", timestr)
dateutil.parser._parser.ParserError: Unknown string format: 9/16/2021      SU1

需要实现兼容两种格式的解析逻辑,保障日期正常提取。

解决方法

触发报错的核心原因是模糊解析模式下,字符串尾部的冗余字符会被误识别为日期组件,和非补零的月/日格式产生冲突,不需要手动给单数字月份补前导零,优先用正则先提取出字符串中符合M/D/YYYY规则的日期段,再交给解析器处理即可兼容1位、2位的月/日格式,代码如下:

import re
import dateutil.parser as dparser

def extract_date(s):
    # 正则提取斜杠分隔的日期段,兼容月、日为1-2位数字的场景
    date_segment = re.search(r'(\d{1,2}/\d{1,2}/\d{4})', s).group(1)
    return str(dparser.parse(date_segment)).split(" ")[0]

# 测试两种格式样本
bd1 = '05/27/2018      SW1604-3'
bd2 = '9/16/2021      SU1'
print(extract_date(bd1))  # 输出:2018-05-27
print(extract_date(bd2))  # 输出:2021-09-16

如果业务要求必须先把所有日期的月、日统一补前导零为2位格式,可以通过正则回调替换实现,处理后再走原有解析逻辑即可:

import re

def pad_date_zero(s):
    def _pad(match_res):
        month, day, year = match_res.groups()
        return f"{month.zfill(2)}/{day.zfill(2)}/{year}"
    # 匹配所有符合M/D/YYYY规则的日期段,对月、日补前导零
    return re.sub(r'(\d{1,2})/(\d{1,2})/(\d{4})', _pad, s)

# 测试
print(pad_date_zero(bd2))  # 输出:09/16/2021      SU1

内容的提问来源于stack exchange,提问作者Noah_Seagull

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:39:58