Regex 在正则表达式中,我可以删除字符串中的位,但仍然可以得到常量分组?

Regex 在正则表达式中,我可以删除字符串中的位,但仍然可以得到常量分组?,regex,preg-match,regex-group,Regex,Preg Match,Regex Group,我有一个字符串,看起来像这样: c1v1c2v2c3v3c4v4.zip 其中C1,C2等是常数,我可以使用其他正则表达式来识别,V1,V2等是变量,可以是任何东西。目前,我有一个正则表达式,它为我将整个字符串放入好的组中-例如“C1”在组1中,“V1”在组2中等等- (C1)(.*?)(C2)(.*?)(C3)(.*?)C4(.*?)(.zip) 但我想知道如果我要删除字符串的一部分,是否有办法保留这些组/匹配,例如: c1v1c2v2c4v4.zip1

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

c1v1c2v2c3v3c4v4.zip

其中C1,C2等是常数,我可以使用其他正则表达式来识别,V1,V2等是变量,可以是任何东西。目前,我有一个正则表达式,它为我将整个字符串放入好的组中-例如“C1”在组1中,“V1”在组2中等等-

(C1)(.*?)(C2)(.*?)(C3)(.*?)C4(.*?)(.zip)
但我想知道如果我要删除字符串的一部分,是否有办法保留这些组/匹配,例如:

c1v1c2v2c4v4.zip1

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


非常感谢

您可以使用这个正则表达式,它使每组常量和变量都是可选的

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

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

这将符合:

  • (C\d)
    匹配捕获组中的C后跟数字
  • 捕获组
    • *?
      匹配任何字符零次或多次非贪婪
    • (?=C\d | \.zip)
      正向前瞻,断言后面的是C后跟数字或字符串末尾的.zip
      $
  • |
  • (\.zip$)
    在组中捕获
    .zip
    ,并断言行的结尾
你说的“保留这些组/匹配”是什么意思?类似这样的话:?可能是
(?:(C\d)|(V\d)(?:\.zip))
?看见