我正在尝试使用C#正则表达式匹配版本号(Major.Minor.Build.Revision)的各个部分。但是,我对编写Regex很新,甚至使用Expresso也证明有点困难。现在,我有这个:
(?<Major>\d*)\.(?<Minor>\d*)\.(?<Build>\d*)\.(?<Revision>\d*)
这样可行,但要求版本号的每个部分都存在。我想做的还是匹配版本:
2.13
在这种情况下,构建和修订组需要返回空值。如果我发现这一切都错了,请随意提出一个更好的方法。
答案 0 :(得分:13)
(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?
使第三和第四部分可选。
答案 1 :(得分:3)
我知道这不是一个正则表达式,但System.Version为你完成所有工作。
答案 2 :(得分:2)
在VBScript中测试过,这种模式:
^(\d+)(\.\d+)?(\.\d+)?(\.\d+)?$
将验证以下所有True:
以下全部错误:
答案 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*)?
我只是将一些“零或一个”量词添加到捕获组中,并添加到点中以防它们不存在。