2016-07-31 24 views
0

Ich möchte Berechnungssoftware schreiben, für separate Zahlen von Operatoren habe ich Regex.Matches() verwendet, aber es gibt einen Fehler, den ich mit dem verwendeten Bild angezeigt habe. Darüber hinaus mathematischen Ausdruck ist:Split mathematischen Ausdruck?

5*10-18/(3+19)

public class Tokenization 
{ 
    public string MathExpression { get; set; } 

    public Tokenization(string expression) 
    { 
     MathExpression = expression; 
    } 

    public List<string> MathExpressionParser() 
    { 
     int number; 
     List<string> tokenList = new List<string>(); 
     List<string> tL = new List<string>(); 

     var numbersAndOperators = Regex.Matches(MathExpression, "(['*,+,/,-,),(']+)|([0-9]+)"); 

     foreach (var item in numbersAndOperators) 
     { 
      tokenList.Add(item.ToString()); 
      Debug.WriteLine(item.ToString()); 
     } 

     return tokenList; 
    } 
} 

}

enter image description here

+0

Sie können das Ergebnis der Zeichenfolge berechnen '5 * 10- 18/(3 + 19) "ohne all dies zu tun. Wenn Sie danach suchen. – user3185569

+0

@ user3185569, ich verwende nicht von compute –

Antwort

4

Sie diesen Ausdruck verwenden können:

string expr = "5*10-18/(3+19)"; 

foreach(var match in Regex.Matches(expr, @"([*+/\-)(])|([0-9]+)")) 
{ 
    Console.WriteLine(match.ToString()); 
} 

Ergebnis:

5 
* 
10 
- 
18 
/
(
3 
+ 
19 
) 
2

entfernen +, da alle Operatoren Sie zeichen entsprechen sind. Vergessen Sie nicht zu entkommen -, sollte es \- sein. Es gibt auch keine Notwendigkeit in Kommas und Anführungszeichen.

Das Ergebnis ist:

([*+/\-)(])|([0-9]+) 

Zusätzlich setzen @ vor der Regex Zeichenfolge, um überschüssige Entkommen zu vermeiden. Oder entkommen die - mit Doppel \\:

([*+/\\-)(])|([0-9]+) 
+0

, aber ich erhalte einen Fehler: unerkannte Escape-Sequenz ==> "\ -" –

+0

@alex Siehe die Bearbeitung. – nicael

Verwandte Themen