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

正则提取'%D %d, %Y'格式日期异常:仅获月份问题排查

问题分析与解决

你的代码存在两个关键错误:

  1. 正则表达式优先级问题:
    你定义的word_months是多个月份用|分隔,直接拼接成word_date后,正则会被解析为January|February|...|November|December(\d+,\s\d{4})。由于|的优先级最低,这意味着表达式会匹配任意单个月份名,或者December加上后续的日年部分。所以处理November 1, 1960时,只会匹配到November这个单独的月份名。

  2. 缺少月份与日年之间的空格匹配:
    即使优先级问题解决,你的正则也没有匹配月份和1, 1960之间的空格,导致无法完整匹配目标字符串。

修正后的代码

import re
from datetime import datetime

# 用非捕获组(?:...)包裹月份,确保|的作用范围仅在月份内部
word_months = r'(?:January|February|March|April|May|June|July|August|September|October|November|December)'
word_day_year = r'\d+,\s\d{4}'
# 加上\s+匹配月份和日年之间的一个或多个空格,提升鲁棒性
word_date = rf'{word_months}\s+{word_day_year}'
s = 'November 1, 1960 ( 1960-11-01 )'
match_result = re.search(word_date, s)
if match_result:
    print(match_result.group())  # 输出:November 1, 1960

额外优化建议

如果需要更严谨的日期匹配(比如限制日期为1-31),可以把word_day_year调整为(?:[1-9]|1\d|2\d|3[01]),\s\d{4},避免匹配无效的日期数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:12:33