如何用正则表达式统计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
相关产品推荐
相关产品推荐

