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

《Automate The Boring Stuff》第七章习题:如何优化日期检测正则?

优化DD/MM/YYYY日期检测的正则表达式

嘿,我来帮你精简这个日期校验的正则!你的原表达式功能是达标的,但确实有不少冗余的地方,咱们一步步优化:

核心优化方向

  • 去掉所有不必要的{1}:正则中单个字符默认匹配一次,加{1}纯属多余,只会增加表达式长度。
  • 简化分组逻辑:把日、月的匹配规则拆分成更直观的分支,减少嵌套分组,提升可读性。

优化后的正则表达式

r"^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[012])\/[12]\d{3}$"

拆解说明

  1. 日部分 0[1-9]|[12]\d|3[01]
    • 0[1-9]:匹配01-09的日期(个位数前置零)
    • [12]\d:匹配10-29的日期
    • 3[01]:匹配30、31的日期
  2. 月部分 0[1-9]|1[012]
    • 0[1-9]:匹配01-09的月份(个位数前置零)
    • 1[012]:匹配10、11、12这三个月份
  3. 年部分 [12]\d{3}
    • 直接匹配1000-1999(1\d{3})和2000-2999(2\d{3})的年份,逻辑清晰且简洁。

额外说明

如果需要更严谨的日期校验(比如区分二月的天数、30天的月份),纯正则其实很难完美处理——毕竟涉及闰年判断、月份天数差异等复杂逻辑。不过按照《Automate The Boring Stuff》第七章这道题的要求,上面的优化版本已经完全满足需求,而且比你的原表达式简洁得多、可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:17:49