我想要匹配件的一个版本的数量(主要的。未成年人。建立。修订)与C#经常表达方式。然而,我漂亮的新书写Regex和甚至使用快报被证明是一个小小的困难。现在我有这样的:

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

这一工作,但要求每一个部分的版本数量存在。什么我想这样做也是匹配的版本,如:

2.13

在这种情况下,建立和修订的组需要返回空值。随意提出一个更好的方法如果我去关于这个完全错误的。

有帮助吗?

解决方案

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

使第三和第四部分可选。

其他提示

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

测试VBScript,这种形态:

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

将验证所有下面的真实:

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

和下面的所有False:

  • 23.11.11.33.11
  • 23.43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4.
  • 4.3.21一个

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

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

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

以上回答不正常

(?<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);

尝试这样的事情:

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

我只是添加了一些<!>“;零或一个<!>”;捕获组的量词,以及它们不存在时的点数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top