2016-07-09 13 views
1

Wie teile ich unter String in Liste von String mit Zahlen und Operatoren getrennt (String enthält keine Klammern oder negative Zahlen).Regex zum Aufteilen von Zahlen und Operatoren

Beispiel:

inputString = 1+2-2.3*4/12.12 
outputList = {1,+,2,-,2.3,*,4,/,12.12} 

Im Folgenden wird mir Zahlen geben nur. Ich brauche Betreiber als auch

var digits = Regex.Split(inputString , @"\D+"); 
+0

Warum '2.3' als' 2.3' geparst wird, aber '12.12' - als' 12, 12'? – soon

+0

Ich dachte, es war ein Tippfehler. – Kinetic

+0

Ich habe Leerzeichen von der Eingabe entfernt, da dies nicht immer der Fall ist. auch korrigierter Tippfehler 12.12 – Cannon

Antwort

2

Da Sie die Struktur der Eingabe bestätigen ist eher simpel - keine Klammern, keine negativen Zahlen - man kann nur einen einfachen \s*([-+/*])\s* Regex verwenden, um die Zeichenfolge zu teilen.

anzumerken, dass Regex.Split auch Ausgang all erfassten Teil im Ergebnis:

Wenn einfangende Klammern in einer Regex.Split Expression verwendet werden, jeder erfassten Text in dem erhaltenen String-Array enthalten ist.

So verwenden

Regex.Split(input, @"\s*([-+/*])\s*") 
        .Where(n => !string.IsNullOrEmpty(n)) 
        .ToList(); 

Nur nicht vergessen, leere Elemente aus der resultierenden Liste/Array zu entfernen.

Musterdetails:

  • \s* - null oder mehr Leerzeichen (zu "trimmen", um die Elemente)
  • ([-+/*]) - Gruppe 1 a -, +, / oder *
  • \s* Einfangen - Null oder mehr Leerräume (um die Elemente zu "trimmen")
Siehe

die IDEONE demo:

var input = "1+2-2.3*4/12.12"; 
var results = Regex.Split(input, @"\s*([-+/*])\s*") 
       .Where(n => !string.IsNullOrEmpty(n)) 
       .ToList(); 
Console.WriteLine(string.Join("\n", results)); 
0

Sie Regex.Matches statt Regex.Split verwenden:

var test = "1 + 2 - 2.3 * 4/12.12"; 
foreach(Match match in Regex.Matches(test, @"\d+(,\d+)*(\.\d+(e\d+)?)|\d+|[\\+-\\*]")) 
    Console.WriteLine(match.Value); 
0

Dies schien für mich FYI

/([\d\.]+)|([+-\/\*])+/g 

zu arbeiten - LinqPad ist ein wunderbares Werkzeug zum Testen von Regex in C#

Verwandte Themen