2012-06-13 14 views
6

Ich möchte mathematische Ausdrücke mit regulären Ausdruck validieren. Der mathematische Ausdruck kann das seinValidieren Sie mathematische Ausdrücke mit regulären Ausdrücken?

  1. Es leer sein bedeutet nichts

    eingegeben
  2. Wenn es immer mit einem Operator + oder - oder * oder / starten angegeben werden und wird immer durch eine Reihe folgen das kann eine beliebige Anzahl von Ziffern haben und die Nummer kann dezimal sein (enthält . zwischen den Zahlen) oder Integer (kein '.' Symbol innerhalb der Nummer). Beispiele: *0.9, +22.36, - 90, / 0.36365

  3. Es kann dann verfolgt werden, was in Punkt 2 (über die Linie) genannt wird. Beispiele: *0.9+5, +22.36*4/56.33, -90+87.25/22, /0.36365/4+2.33

Bitte helfen Sie mir.

+0

'- * 0.9 + 5' liegt außerhalb der Definition Ihres Problems. Darüber hinaus fügt es Ihren Ausdrücken eine rekursive Natur hinzu. –

+0

@Jason McCreary - ja ich habe erwähnt, dass in Punkt 3, dass es rekursiv sein kann. – Bibhu

+0

Das entspricht nicht Ihrem ursprünglichen Beispiel. Aber ich sehe, du hast das '-' und Leerzeichen in deinem Schnitt gelöscht. Jetzt sind sie ausgerichtet. –

Antwort

12

So etwas sollte funktionieren:

^([-+/*]\d+(\.\d+)?)* 

Regexr Demo

  • ^ - Anfang der Zeichenfolge
  • [-+/*] - eines dieser Operatoren
  • \d+ - eine oder mehrere Zahlen
  • (\.\d+)? - ein optionaler Punkt durch eine oder mehrere Zahlen gefolgt
  • ()* - der ganze Ausdruck wiederholt null oder mehrere Male
+2

+1 für tatsächlich * antwort * die Frage. –

+0

@Jason McCreary - bitte werfen Sie einen Blick auf das Beispiel, ich meinte das erste '-' als ein Hypen nicht Subtraktions-Symbol. – Bibhu

+0

@Bibhu Ja zuerst dachte ich, es ist ein einfacher Bindestrich, und Sie haben geschrieben, dass es immer mit einem Operator beginnt, gefolgt von einer Zahl, so dass das Minus dort nicht passen würde :). – kapa

-1

Wenn Sie negative oder positive Ausdruck möchten, können Sie es wie folgt schreiben>
^\-?[0-9](([-+/*][0-9]+)?([.,][0-9]+)?)*?$

Und ein zweiter
^[(]?[-]?([0-9]+)[)]??([(]?([-+/*]([0-9]))?([.,][0-9]+)?[)]?)*$

Mit Klammer im Ausdruck, aber Sie müssen nicht die Anzahl zählt Methode, die es oder regex validieren. // die Methode

public static bool IsPairParenthesis(string matrixExpression) 
    { 
     int numberOfParenthesis = 0; 
     foreach (char character in matrixExpression) 
     { 
      if (character == '(') 
      { 
       numberOfParenthesis++; 
      } 
      if (character == ')') 
      { 
       numberOfParenthesis--; 
      } 
     } 

     if (numberOfParenthesis == 0) 
     { return true; } 
     return false; 
    } 
Verwandte Themen