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

如何用正则表达式统计DD-MM-YYYY格式日期的不同年份数量?

当然可以用正则表达式解决这个问题!

这是处理这类文本提取统计任务的常规思路,我给你拆解具体步骤和示例:

1. 用正则匹配DD-MM-YYYY格式的日期并捕获年份

首先我们需要一个正则表达式来定位文本中所有符合DD-MM-YYYY格式的日期,同时单独捕获年份部分。基础版的正则可以写成:

\b\d{2}-\d{2}-(\d{4})\b
  • \b:单词边界,避免匹配像1234-56-78901这类长数字串里的片段
  • \d{2}:匹配两位数字的日和月
  • (\d{4}):捕获组,专门提取四位数字的年份

如果需要更严格地过滤掉格式上明显无效的日期(比如月份是13,日期是32),可以用更精准的正则:

\b(0[1-9]|[12]\d|3[01])-(0[1-9]|1[0-2])-(\d{4})\b

这个版本会限制日在01-31、月在01-12范围内,但注意它还是无法处理闰年2月的特殊情况(比如29-02-2021会被匹配但实际是无效日期),如果需要绝对准确的日期验证,提取年份后可以配合日期处理工具做二次校验。

2. 提取年份并统计去重后的数量

拿到所有匹配的年份后,我们可以用集合(Set)自动去重的特性,直接统计集合的大小就是不同年份的数量。下面给两个常用语言的示例:

Python 示例

import re

# 示例文本
text = "会议记录:05-03-2022的项目总结,10-07-2023的进度汇报,25-12-2022的年终复盘,01-01-2024的新年规划"

# 匹配并提取年份
year_pattern = r'\b\d{2}-\d{2}-(\d{4})\b'
extracted_years = re.findall(year_pattern, text)

# 去重并统计数量
unique_year_count = len(set(extracted_years))

print(f"文本中包含 {unique_year_count} 个不同的年份")
# 输出:文本中包含 3 个不同的年份

JavaScript 示例

const text = "会议记录:05-03-2022的项目总结,10-07-2023的进度汇报,25-12-2022的年终复盘,01-01-2024的新年规划";
const yearRegex = /\b\d{2}-\d{2}-(\d{4})\b/g;

const uniqueYears = new Set();
let matchResult;

// 遍历所有匹配结果
while ((matchResult = yearRegex.exec(text)) !== null) {
  uniqueYears.add(matchResult[1]);
}

console.log(`文本中包含 ${uniqueYears.size} 个不同的年份`);
// 输出:文本中包含 3 个不同的年份

总结

整体思路非常清晰:用正则精准定位并提取所有符合格式的年份,再通过集合去重后统计数量,完全可以解决你的问题。如果对日期有效性要求极高,在提取年份后额外加一步日期合法性校验即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:58:16