2017-03-09 3 views
-1

Wenn ich eine Zeichenfolge übergebe (Verstring == "Name.1.19.5"), wird die Version zurückgegeben, da ich Currentver [0] ignoriere. Wenn ich Verstring == "1.19.5" übergeben möchte.Versionsnummer aus String extrahieren (zB: "ver.1.9.0")

ich meine, ich werde in beiden Formaten mit Versionsnamen (vername) oder nur Version (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

Wie können die Zahlen variieren? Ist es immer 3? Getrennt von: und. ? –

+1

Sie brauchen Regex nicht. Ersetze den Doppelpunkt mit Punkten und nimm einen Teilstring von Index 5 bis zum Ende –

+1

[Einige Leute, wenn sie mit einem Problem konfrontiert sind, denken "Ich weiß, ich werde reguläre Ausdrücke verwenden." Jetzt haben sie zwei Probleme.] (Https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/) – JDB

Antwort

2

Wenn Sie Regex verwenden geöffnet sind, können Sie die Antwort unten helfen:

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

Es verwendet Regex benannte Gruppen, um die Wert-Versionen abzurufen. Sie können den Gruppennamen mit a, b der Regex als Teil ändern, c, wenn Sie es vorziehen, und Sie so etwas wie diese bekommen würde:

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

Dies konnte 2.7.14 nicht analysieren, sondern 2.7.1 zurückgegeben. – NucS

0

hier verstring Sie gehen:

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); 
     } 
    } 
} 

Oder wenn Sie Array wollen mit jeder Versionsziffer.

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

Warum machen das Leben schwerer als es ohnehin schon ist?

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

Jetzt brauchen Sie nicht zu kümmern, ob es sich tatsächlich um : getrennt ist oder . Sie können einfach geteilt durch .:

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