如何在正则捕获组1中匹配任意顺序组合的季节词汇与年份
正则修改方案
你可以通过正向前瞻先分别定位季节和年份的位置,再将两者合并到同一个捕获组中,无需匹配两者中间的无关内容,修改后的正则如下:
((?=.*\b(autumn|spring|summer|winter)\b)(?=.*\b(\d{4})\b)\2 \3)
正则说明
- 内层的两个正向前瞻
(?=.*\b(autumn|spring|summer|winter)\b)和(?=.*\b(\d{4})\b)会分别扫描整个字符串,捕获到对应的季节值和4位年份值,不受两者出现顺序的影响 - 外层的括号将拼接后的季节、年份内容整体包裹为捕获组1,直接输出两个目标内容的合并结果
- 如果你需要兼容大小写不敏感的匹配,可以在正则开头加
(?i)修饰符,写法为((?i)(?=.*\b(autumn|spring|summer|winter)\b)(?=.*\b(\d{4})\b)\2 \3)
匹配效果
对你给出的示例文本,捕获组1的输出结果如下:
- autumn 2021
- 2021 autumn
- autumn 2021
- autumn 2021
如果你的使用场景不支持正向前瞻,也可以用分支逻辑配合替换操作实现,匹配正则写为:
.*?(?:(autumn|spring|summer|winter)\D*(\d{4})|(\d{4})\D*(autumn|spring|summer|winter)).*
替换内容填$1$3 $2$4即可得到相同的合并结果。
内容的提问来源于stack exchange,提问作者Steffen Mandrup
相关产品推荐
相关产品推荐

