我试图想出一个正则表达式,它将捕获一个包含两个“(v#)”实例的字符串(其中#可以是任意数字)。例如,不会捕获字符串“Test(v6)”,但“Test(v6)Word(v2)”将是,因为它包含“(v#)”的两个实例。我得到的最远的是:
^.*?(\((v)(\d+)(\))){2}
但只有当版本号(“(v#)”)彼此相邻时才有效。
更新:
实际上如果我能得到正则表达式以确保字符串的最后包含(v#),我的问题就会得到解决。我真的想忽略中间版本号。我知道这涉及使用$而不是^但是到目前为止我都是这样。
答案 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}