我试图用正则表达式匹配一个版本子字符串,其形式为v###.##.###或version #.##.###。版本号的数量并不重要,在v或version后面可能有空格,也可能没有空格。这是我目前所做的尝试,但在某些情况下并不匹配:
\bv\s?[\d.]*\b|\bversion\s?[\d.]*\b
例如,它匹配“version 6.2.11”,但不匹配c2000_v6.2.11。我对regex比较陌生,不知道我在这里做错了什么。我很确定还有更好的方法来完成“or”部分,所以任何帮助都将不胜感激,谢谢!
1条答案
按热度按时间kninwzqo1#
首先,通过实现一个可选的非捕获组,您的模式可以大大缩短,这样
v
或version
就可以在不需要替换的情况下进行匹配。接下来,第一个
\b
需要字边界,但是版本信息在第二个预期匹配中的_
之后开始,并且_
是字字符。您可以使用
请参阅regex demo。
(?<![^\W_])
-紧靠左侧,不能有字母或数字v
-一个v
字符(?:ersion)?
-可选的ersion
字符串\s?
-可选空格[\d.]*
-零个或多个数字或点\b
-字边界。