2017-03-09 77 views
-1

如果我传递字符串(verstring ==“vername.1.19.5”),它将返回版本,因为我忽略Currentver [0]。如果我想通过verstring ==“1.19.5”。从字符串中提取版本号(例如:“ver.1.9.0”)

我的意思是,我将在这两种格式的版本名称(vername)或唯一版本得到verstring(1.19.5)

public VerInfo(string verString) 
    { 
     string[] currentVer; 

     if (versionString.Contains(".")) 
      currentVer= versionString.Split(".".ToCharArray()); 
     else 
      currentVer= versionString.Split(":".ToCharArray()); 

     a= Convert.ToByte(currentVer[1]); 
     b= Convert.ToByte(currentVer[2]); 
     c= Convert.ToByte(currentVer[3]); 
    } 
+0

如何能在数字不同?它总是3吗?分隔:和。 ? –

+1

你不需要正则表达式。用点替换冒号并从索引5开始取一个子串直到结束 –

+1

[有些人在遇到问题时想'我知道,我会用正则表达式'。“现在他们有两个问题。](https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/) – JDB

回答

2

如果您打开使用Regex,下面的答案可能会帮助您:

var regexPattern = @"(?:ver\:)?(?<major>\d)[\.|\:](?<minor>\d)[\.|\:](?<revision>\d)"; 
var regex = new Regex(regexPattern); 

var match = regex.Match("1:2.3"); 
var major = Convert.ToByte(match.Groups["major"].Value); 
var minor = Convert.ToByte(match.Groups["minor"].Value); 
var revision = Convert.ToByte(match.Groups["revision"].Value); 

它使用命名组正则表达式,以获取价值的版本。您可以通过A,B更改组名正则表达式的一部分,C,如果你喜欢,你会得到这样的:

var regexPattern = @"(?:ver\:)?(?<a>\d)[\.|\:](?<b>\d)[\.|\:](?<c>\d)"; 
var regex = new Regex(regexPattern); 

var match = regex.Match("1:2.3"); 
var a = Convert.ToByte(match.Groups["a"].Value); 
var b = Convert.ToByte(match.Groups["b"].Value); 
var c = Convert.ToByte(match.Groups["c"].Value); 
+0

未能解析2.7.14,而是返回2.7.1。 – NucS

0

在这里你去:

using System; 
using System.Text.RegularExpressions; 

namespace RegVer { 
    class Prog { 
     static void Main() { 
      var verstring = "ver:1:9.5"; 
      var dotVerString = verstring.Replace(':','.'); 
      Console.WriteLine(Regex.Match(dotVerString, @"ver\.([\d\.]+)").Groups[1].Value); 
     } 
    } 
} 

或者,如果你想数组与每个版本的数字。

using System; 
using System.Text.RegularExpressions; 

namespace RegVer { 
    class Prog { 
     static void Main() { 
      var verstring = "ver:1:9.5"; 
      var VerABC = Regex.Matches(verstring, @"\d"); 
      Console.WriteLine("a = " + VerABC[0] + "\n" + 
           "b = " + VerABC[1] + "\n" + 
           "c = " + VerABC[2]); 
     } 
    } 
} 
0

为什么使生活变得更难,因为它已经是?

string v = verstring.Replace(':','.').Substring(5,verstring.Length); 

现在你不需要去关心它是否实际上是由:分离或.您可以通过简单地.分裂:

currentVer = v.Split('.'); 
a= Convert.ToByte(currentVer[1]); 
b= Convert.ToByte(currentVer[2]); 
c= Convert.ToByte(currentVer[3]);