我正在尝试匹配Major,Minor,Revision和Build number。
我的问题是:
给出2个版本
string Version1 = "01.01.02.44";
string Version2 = "01.01.02.FF1";
string pattern =@"\d+.\d+.\d+.\d+";
var regEx = new Regex(pattern, RegexOptions.IgnoreCase);
var versionMatch = regEx.Match(Version2);
if (match.Success)
{
// DO ...
}
使用以下正则表达式模式:
string pattern =@"\d+.\d+.\d+.\d+";
我可以匹配版本1 ...
但我怎么能让它与Version2相匹配?
答案 0 :(得分:4)
您需要检查版本号中有效的字符,而不仅仅是数字。例如,以下正则表达式将匹配两者:
string pattern =@"\d+\.\d+\.\d+\.[0-9F]+";
这假设前三个部分都是纯数字,而最后一个部分可以是任何数字或字母F.您只需根据您的精确要求修改字符类(我们不会这样做)。 ;知道)。
答案 1 :(得分:3)
最简单的方法是拆分.
。
string[] parts = versionNumber.Split('.');
if (parts.Length != 4)
{
// Invalid revision number.
}
else
{
string major = parts[0];
string minor = parts[1];
string revision = parts[2];
string buildNumber = parts[3];
// etc...
}
答案 2 :(得分:2)
为什么要使用字符串操作来处理版本号?
我建议使用 System.Version 类。
该类已经管理了版本的所有部分( Build , Major , MajorRevision , Minor ,< em> MinorRevision , Revision )。
您可以轻松地比较版本号,不仅可以匹配,还可以检查版本号是旧版还是新版本号:
Version v1 = new Version(2, 0);
Version v2 = new Version("2.1");
Console.Write("Version {0} is ", v1);
switch(v1.CompareTo(v2))
{
case 0:
Console.Write("the same as");
break;
case 1:
Console.Write("later than");
break;
case -1:
Console.Write("earlier than");
break;
}
Console.WriteLine(" Version {0}.", v2);
有关更多详细信息和示例,请查看有关System.Version的MSDN article。
该类将为您节省使用字符串操作自行处理版本号的不同部分的开销。
答案 3 :(得分:0)
那是因为你只是寻找整数0-9而不是字母
你可以将sting分成多个组,使用。*?获取所有字符只改为[0-9]
@"(?s)\.(?<string>.*?)\.(?<string>.*?)\.(?<string>.*?)\.(?<string>.*?)"
答案 4 :(得分:0)
要捕获您提及的两个字符串,您可以更改:
string pattern =@"\d+.\d+.\d+.\d+";
为:
string pattern =@"\d\d[.]\d\d[.]\d\d[.]...|\d\d[.]\d\d[.]\d\d[.]..";
如果您对正则表达式的工作方式有所了解并且可能会测试一些场景,那将对您有所帮助。然后你可以调整模式以满足你的确切需求。
如果要在yuor模式中捕获点(。),则必须将其括在方括号中,因为它用作保留字符。加号(+)表示前面字符的任意数字,因此\ d +将匹配任意数量的数字(01和0123以及567789等)。
如果你想测试你的正则表达式,你可以online。