匹配版本号部分与正则表达式

时间:2008-12-30 15:17:00

标签: c# regex version

我正在尝试使用C#正则表达式匹配版本号(Major.Minor.Build.Revision)的各个部分。但是,我对编写Regex很新,甚至使用Expresso也证明有点困难。现在,我有这个:

(?<Major>\d*)\.(?<Minor>\d*)\.(?<Build>\d*)\.(?<Revision>\d*)

这样可行,但要求版本号的每个部分都存在。我想做的还是匹配版本:

2.13

在这种情况下,构建和修订组需要返回空值。如果我发现这一切都错了,请随意提出一个更好的方法。

6 个答案:

答案 0 :(得分:13)

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

使第三和第四部分可选。

答案 1 :(得分:3)

我知道这不是一个正则表达式,但System.Version为你完成所有工作。

答案 2 :(得分:2)

在VBScript中测试过,这种模式:

^(\d+)(\.\d+)?(\.\d+)?(\.\d+)?$

将验证以下所有True:

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

以下全部错误:

  • 23.11.11.33.11
  • 23.43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4。
  • 4.3.21a

答案 3 :(得分:1)

如果您不想使用正则表达式,可以尝试:

System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(<string filePath>);

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;

答案 4 :(得分:0)

以上回答不正常

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

尝试这个,

  var regularExpression = @"^(\d+\.)?(\d+\.)?(\d+\.)?(\*|\d+)$";
                var regex = Regex.IsMatch("1.0.0.0", regularExpression, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
                Console.WriteLine(regex);

答案 5 :(得分:-1)

尝试这样的事情:

(?<Major>\d*)\.?(?<Minor>\d*)?\.?(?<Build>\d*)?\.?(?<Revision>\d*)?

我只是将一些“零或一个”量词添加到捕获组中,并添加到点中以防它们不存在。