2012-06-13 34 views
6

Quiero validar expresiones matemáticas usando expresiones regulares. La expresión matemática puede ser estoValidar expresiones matemáticas usando expresiones regulares?

  1. Puede estar en blanco significa nada se introduce

  2. Si especifica que siempre se iniciará con un operador + o - o * o / y siempre será seguido por un número que puede tener cualquier cantidad de dígitos y el número puede ser decimal (contiene . entre los números) o entero (sin el símbolo '.' dentro del número). ejemplos: *0.9, +22.36, - 90, / 0.36365

  3. Se puede entonces seguida por lo que se menciona en el punto 2 (encima de la línea). ejemplos: *0.9+5, +22.36*4/56.33, -90+87.25/22, /0.36365/4+2.33

favor me ayude a cabo.

+0

'- * 0.9 + 5' está fuera de la definición de su problema. Además, agrega una naturaleza recursiva a tus expresiones. –

+0

@Jason McCreary - Sí, he mencionado que en el punto 3 puede ser recursivo. – Bibhu

+0

Eso no sigue su ejemplo original. Pero veo que eliminaste el '-' y el espacio en tu edición. Entonces ahora están alineados. –

Respuesta

12

Algo como esto debería funcionar:

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

Regexr Demo

  • ^ - principio de la cadena
  • [-+/*] - uno de estos operadores
  • \d+ - uno o más números
  • (\.\d+)? - un punto opcional seguido de uno o más números
  • ()* - toda la expresión repetido cero o más veces
+2

+1 por * respuesta * a la pregunta. –

+0

@Jason McCreary - por favor, eche un vistazo al ejemplo, quise decir el primer '-' como un símbolo de hypen no restar. – Bibhu

+0

@Bibhu Sí, al principio asumí que es un guión simple, y usted escribió que siempre comienza con un operador seguido de un número, por lo que el signo menos no cabría allí :). – kapa

-1

Si desea expresión negativa o positiva se puede escribir como este>
^\-?[0-9](([-+/*][0-9]+)?([.,][0-9]+)?)*?$

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

Con paréntesis en la expresión, pero no cuenta el número que va a necesitar método que lo valida o regex. // el método

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; 
    } 
Cuestiones relacionadas