正则表达式 - 从捕获中间排除“1”或“11”

杰万

我有这个表达来捕捉季节和它们的年份的文本

(?:WIN\w+|SPR\w+|SUM\w+|FA\w+) \d{4}

我想要捕获的典型比赛的格式为“FALL 2011”或“SPRING 2019”等,但 Summer 与此格式不同,可以是“Summer 1 2011”或“Summer 11 2011”,其捕获方式类似于“Summer 1201” ' 或 '1120 年夏天'。我希望表达式仍然与季节匹配并捕获年份,但对于夏季,它需要在捕获年份之前忽略“1”或“11”。

我试图通过添加负前瞻来修改它,以忽略它在年份之前找到的任何 '1(space)' 或 '11(space)' 模式,因为在大多数情况下它只会找到由四个连续组成的年份数字,在 Summer 的情况下,它应该找到并跳过 1 或 11,但我的测试表明我修改后的表达式不起作用。我对正则表达式仍然很缺乏经验。

米哈乌·图尔钦

你必须在赛季结束后“锚定”到最后四位数字。以下是执行此操作的模式:

(SUMMER|FALL|WINTER|SPRING).+?(\d{4})(?=\D|$)

解释:

(SUMMER|FALL|WINTER|SPRING) - 交替,匹配四个季节之一并将其存储在第一个捕获组中

.+? - 匹配 1+ 个任意字符,非贪婪

(\d{4}) - 匹配四位数字并将其存储在第二个捕获组中

(?=\D|$)- 正向前瞻,断言接下来是非数字\D或字符串结尾$

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章