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

正则匹配需求:仅提取2位/4位的成对年份数字

问题需求

给定以下字符串:

myStr1 = 'new classic 11111 new classic 2020 year report'
myStr2 = '2020 year - 2022 year report'
myStr3 = '20 year - 2022 year report'
myStr4 = '2020 to 2022 report'

需要实现:

  • 从myStr2、myStr3、myStr4中提取两个2位或4位的年份数字
  • 不匹配myStr1(该字符串包含非2/4位的数字11111,且无符合规则的年份配对)

原正则re.search('(\d{2}|\d{4})(year?)(-|\w+)(\d{2}|\d{4})(year?)', myStr1)会错误从11111中截取11,需要修正。

修正后的正则表达式

使用以下正则可满足需求:

re.search(r'\b(\d{2}|\d{4})\s*(year)?\s*(?:-|to)\s*(\d{2}|\d{4})\s*(year)?\b', target_str)
关键修改说明
  • 单词边界\b:确保匹配的数字是独立单词,不会从更长的数字(如11111)中截取片段,彻底避免误匹配。
  • 精准限定连接符:将原正则的-|\w+改为-|to,只匹配指定的连接符,避免匹配无关单词。
  • 可选空白符\s*:兼容数字、year、连接符之间的空格差异,适配不同格式的字符串。
  • 非捕获组(?:...):连接符部分用非捕获组,避免提取不需要的连接符内容。
测试结果
  • myStr1:无匹配结果,符合要求
  • myStr2:提取分组结果为('2020', 'year', '2022', 'year')
  • myStr3:提取分组结果为('20', 'year', '2022', 'year')
  • myStr4:提取分组结果为('2020', None, '2022', None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:45:01