从字符串中提取版本号的正则表达式模式

17

我想从一个字符串中提取版本号。

a string =  "Tale: The  Secrets 1.6"

b string=" The 34. Mask 1.6.98";

所以,对于版本号为1.6的a和版本号为1.6.98的b


2
这完全取决于您对版本号的定义,对吧?在C#中,1.6不是标准版本号,它应该像1.6.0.0。您计划遇到哪些其他类型的版本号?单个数字算作版本号吗?您的字符串中是否有除版本号之外的数字需要考虑?尝试使用正则表达式提取任何后跟句点的数字:((([0-9]+).?)+),并将其传递给Version类,该类可以在构造函数中接受一个字符串。 - devshorts
请参见 https://stackoverflow.com/a/67308239/670028。 - Randy Burden
4个回答

41
\d+(\.\d+)+

\d+ :一个或多个数字
\. :一个点
(\.\d+)+ :一个或多个点加数字的组合

会找到

2.5
3.4.567
3.4.567.001

但是将不会找到

12
3.
.23

如果你想排除像2.5这样的小数,并且希望版本号至少有3个部分,你可以使用类似这样的量词:

\d+(\.\d+){2,}
在逗号后面,您可以指定最大出现次数。

10

尝试:

Regex pattern = new Regex("\d+(\.\d+)+");
Match m = pattern.Match(a);
string version = m.Value;

1
该正则表达式也将匹配以点结尾的数字,例如 34. - Douglas

6

您可以书写

[0-9]+(\.[0-9]+)+$

这应该符合格式。 $ 表示匹配结尾,如果不需要可以省略。


如果版本号的部分用“_”分隔,\. 应该替换为“_”:[0-9]+(_[0-9]+)+$(参考此重复问题)。 - Wiktor Stribiżew

3
您说的版本号,是指由数字和点号组成的任何序列吗?
\d+(\.\d+)+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接