2017-03-09 81 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]);