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

如何用正则表达式提取三种指定格式的日期?

提取目标日期的正则方案

我来帮你搞定这个日期提取的需求!先梳理下你要匹配的三种日期格式:

  • 带点的完整月份:September. 21, 2012(month. dd, yyyy)
  • 无点的完整月份:July 25, 1998(month dd, yyyy)
  • 月份缩写:Oct 18, 1980(mmm dd, yyyy)

针对这三种格式,我们可以写一个精准覆盖所有情况的正则表达式,下面是具体方案:

正则表达式解析

(?:January|February|March|April|May|June|July|August|September|October|November|December)\.?\s+\d{1,2},\s+\d{4}|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec\s+\d{1,2},\s+\d{4}

拆解下各部分的作用:

  • (?:January|...|December):非捕获分组,匹配所有完整月份名(用?:避免生成多余的捕获组)
  • \.?:匹配可选的点号,兼容带点的完整月份(比如September.)
  • \s+:匹配一个或多个空格,处理月份和日期之间的空格
  • \d{1,2}:匹配1-2位的日期数字(不管是5还是21都能匹配)
  • ,\s+:匹配逗号加一个或多个空格,对应日期和年份之间的分隔
  • \d{4}:匹配4位年份数字
  • |Jan|Feb|...|Dec:并列匹配所有3位月份缩写,覆盖第三种格式

Python 实战示例

用Python的re模块直接提取所有符合格式的日期:

import re

text = 'This is my text I will search through for patterns September. 21, 2012. As well as July 25, 1998 and a date like Oct 18, 1980'

# 编译正则表达式
date_regex = re.compile(r'(?:January|February|March|April|May|June|July|August|September|October|November|December)\.?\s+\d{1,2},\s+\d{4}|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec\s+\d{1,2},\s+\d{4}')

# 提取所有匹配的完整日期
matched_dates = date_regex.findall(text)
print(matched_dates)
# 输出结果: ['September. 21, 2012', 'July 25, 1998', 'Oct 18, 1980']

补充小提示

如果你的文本里还有其他月份变体(比如用Sept代替Sep),直接在缩写列表里加上对应的选项就行;如果需要严格限制日期为01-31的合法范围,得再细化正则,但日常场景下\d{1,2}已经足够覆盖大多数情况啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:34