首页 > 解决方案 > REGEX 我可以在哪里删除字符串中的位并仍然获得恒定的分组?

问题描述

我有一个看起来像这样的字符串:

C1 V1 C2 V2 C3 V3 C4 V4.zip

其中 C1、C2 等是我可以使用其他 REGEX 来识别的常量,而 V1、V2 等是可以是任何字面意思的变量。目前我有一个正则表达式,它将完整的字符串放在对我来说很好的组中 - 例如“C1”在第 1 组中,“V1”在第 2 组中等等 -

(C1)(.*?)(C2)(.*?)(C3)(.*?)C4(.*?)(.zip)

但我想知道如果我要删除字符串的一部分,是否有办法保留这些组/匹配项,例如:

C1 V1 C2 V2 C4 V4.zip1< 我在这里跳过了 3。

https://regex101.com/r/lpiG4H/6

如果这不可能,请告诉我:)

非常感谢!

标签: regexpreg-matchregex-group

解决方案


如果您想保留第 1 组和第 2 组并.zip在第 3 组中捕获,您可以尝试使用交替

那将匹配:

(C\d)(.*?(?=C\d|\.zip))|(\.zip$)

  • (C\d)匹配 C 后跟捕获组中的数字
  • (捕获组
    • .*?匹配任何字符零次或多次非贪婪
    • (?=C\d|\.zip)断言后面是 C 后跟数字或字符串末尾的 .zip 的肯定前瞻$
  • )
  • |或者
  • (\.zip$)在组中捕获.zip并断言行尾

推荐阅读