2012-06-13 19 views
6

Voglio convalidare espressioni matematiche usando l'espressione regolare. L'espressione matematica può essere presenteConvalida le espressioni matematiche utilizzando l'espressione regolare?

  1. Può essere vuoto significa nulla viene inserito

  2. Se specificato sarà sempre iniziare con un operatore + o - o * o / e sarà sempre seguito da un numero che può avere un numero qualsiasi di cifre e il numero può essere decimale (contiene . tra i numeri) o intero (nessun simbolo "." all'interno del numero). esempi: *0.9, +22.36, - 90, / 0.36365

  3. Può essere poi seguita da quanto indicato al punto 2 (sopra la linea). esempi: *0.9+5, +22.36*4/56.33, -90+87.25/22, /0.36365/4+2.33

Si prega di aiutarmi.

+0

'- * 0.9 + 5' non rientra nella definizione del problema. Inoltre, aggiunge una natura ricorsiva alle tue espressioni. –

+0

@Jason McCreary - sì, ho detto che al punto 3 può essere ricorsivo. – Bibhu

+0

Questo non segue il tuo esempio originale. Ma vedo che hai lasciato il '-' e lo spazio nella tua modifica. Quindi ora sono allineati. –

risposta

12

Qualcosa del genere dovrebbe funzionare:

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

Regexr Demo

  • ^ - all'inizio della stringa
  • [-+/*] - uno di questi operatori
  • \d+ - uno o più numeri
  • (\.\d+)? - un punto opzionale seguito da uno o più numeri
  • ()* - l'intera espressione ripetuto zero o più volte
+2

+1 per effettivamente * rispondere * alla domanda. –

+0

@Jason McCreary - per favore date un'occhiata all'esempio, intendevo il primo '-' come simbolo di ipen non sottrazione. – Bibhu

+0

@Bibhu Sì, all'inizio ho pensato che fosse un trattino semplice, e hai scritto che inizia sempre con un operatore seguito da un numero, quindi il meno non andrebbe bene lì :). – kapa

-1

Se si desidera espressione negativa o positiva si può scrivere in questo modo>
^\-?[0-9](([-+/*][0-9]+)?([.,][0-9]+)?)*?$

E una seconda
^[(]?[-]?([0-9]+)[)]??([(]?([-+/*]([0-9]))?([.,][0-9]+)?[)]?)*$

Con parentesi nella espressione, ma non conta il numero è necessario metodo che lo convalida o regex. // il metodo

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; 
    } 
Problemi correlati