题
我想要匹配件的一个版本的数量(主要的。未成年人。建立。修订)与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*)?
我只是添加了一些<!>“;零或一个<!>”;捕获组的量词,以及它们不存在时的点数。
不隶属于 StackOverflow