C#Regex用于多个模式实例

时间:2015-04-13 16:12:15

标签: regex

我试图想出一个正则表达式,它将捕获一个包含两个“(v#)”实例的字符串(其中#可以是任意数字)。例如,不会捕获字符串“Test(v6)”,但“Test(v6)Word(v2)”将是,因为它包含“(v#)”的两个实例。我得到的最远的是:

^.*?(\((v)(\d+)(\))){2}

但只有当版本号(“(v#)”)彼此相邻时才有效。

更新:

实际上如果我能得到正则表达式以确保字符串的最后包含(v#),我的问题就会得到解决。我真的想忽略中间版本号。我知道这涉及使用$而不是^但是到目前为止我都是这样。

3 个答案:

答案 0 :(得分:1)

如果您真正关心的是最后的版本,请执行以下操作:

\s+\((?<version>v\d+)\)$

以下是对正在发生的事情的解释。

Any whitespace character 
+ (one or more times)
(
Capture to <version>
  v
  Any digit 
  + (one or more times)
End Capture
)$ (anchor to end of string)

答案 1 :(得分:0)

这个怎么样:

^.*\(\s*v\d+\s*\).*\(\s*v\d+\s*\).*$

答案 2 :(得分:0)

扩展您的(外部)括号以包含.*?,所以你有这个:

^(.*?\((v)(\d+)(\))){2}

此外,不知道你是否在这里使用这些捕获组(在这种情况下可以随意忽略这一点)但如果你摆脱了一些无关的括号,可能会更容易理解是什么:

^(.*?\(v\d+\)){2}