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

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

(?\d*)\.(?\d*)\.(?\d*)\.(?\d*) 

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

 2.13 

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

 (?\d*)\.(?\d*)(\.(?\d*)(\.(?\d*))?)? 

使第三和第四部分可选。

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

如果您不想使用Regex,可以尝试:

 System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(); int major = fvi.FileMajorPart; int minor = fvi.FileMinorPart; int build = fvi.FileBuildPart; 

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

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

将validation以下所有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

以上答案不能正常工作

 (?\d*)\.(?\d*)(\.(?\d*)(\.(?\d*))?)? 

试试这个,

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

尝试这样的事情:

(?\d*)\.?(?\d*)?\.?(?\d*)?\.?(?\d*)?

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