【问题标题】:Matching version number parts with regular expressions使用正则表达式匹配版本号部分
【发布时间】:2008-12-30 15:17:00
【问题描述】:

我正在尝试将版本号 (Major.Minor.Build.Revision) 的部分与 C# 正则表达式相匹配。但是,我对编写 Regex 还是很陌生,即使使用 Expresso 也被证明有点困难。现在,我有这个:

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

这可行,但要求版本号的每个部分都存在。我想做的也是匹配版本,例如:

2.13

在这种情况下,构建组和修订组需要返回空值。如果我要解决这一切都错了,请随意提出更好的方法。

【问题讨论】:

    标签: c# regex version


    【解决方案1】:
    (?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?
    

    使第三和第四部分可选。

    【讨论】:

    • 投了赞成票,因为我在点击相同答案的帖子后 3 秒 :)
    • 谢谢!在过去的尝试中,我将每个组包含在自己的零或更多表达式中,而不是嵌套它们。
    • @sean.bright:谢谢,祝你好运。在某种程度上,仍然存在西部最快的枪支问题。 :D
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在 VBScript 中测试,这种模式:

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

      将验证以下所有 True:

      • 23
      • 23.1
      • 23.1.1
      • 23.1.1.1

      且以下全部为假:

      • 23.11.11.33.11
      • 23.43 2.1
      • 44.11.2 3
      • 3q.4.2.1
      • 3.4.
      • 4.3.21a

      【讨论】:

        【解决方案4】:

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

        System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(<string filePath>);
        
        int major = fvi.FileMajorPart;
        int minor = fvi.FileMinorPart;
        int build = fvi.FileBuildPart;
        

        【讨论】:

        • 有没有可能得到Revison? Ma.Mi.B.R
        【解决方案5】:

        上面的答案不能正常工作

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

        【讨论】:

          【解决方案6】:

          试试这样的:

          (?&lt;Major&gt;\d*)\.?(?&lt;Minor&gt;\d*)?\.?(?&lt;Build&gt;\d*)?\.?(?&lt;Revision&gt;\d*)?

          我只是在捕获组和点中添加了一些“零或一”量词,以防它们不存在。

          【讨论】:

          • 允许 2.13.. 作为有效数字;还有 2.13..13.
          猜你喜欢
          • 2014-08-10
          • 1970-01-01
          • 2011-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-17
          • 2015-04-12
          • 2017-11-29
          相关资源
          最近更新 更多