正则表达式模式匹配文件版本

时间:2012-11-09 13:07:37

标签: c# regex

我正在尝试匹配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相匹配?

5 个答案:

答案 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等)。

请参阅regex cheat sheet

如果你想测试你的正则表达式,你可以online