2012-06-13 153 views
6

我想驗證使用正則表達式的數學表達式。數學表達式可以是這個使用正則表達式驗證數學表達式?

  1. 它可以是空白意味着什麼輸入

  2. 如果指定了它將始終與運營商+-*/開始,將始終遵循由多個可以有任意數字的 ,數字可以是十進制(包含.之間的數字)或整數(數字中沒有'。'符號)。 例子:*0.9+22.36- 90/ 0.36365

  3. 可以再其次是什麼是在點2(上面的行)中提到。 例子:*0.9+5+22.36*4/56.33-90+87.25/22/0.36365/4+2.33

請幫助我。

+0

' - * 0.9 + 5'超出了您的問題的定義範圍。此外,它爲您的表達式添加了遞歸性質。 –

+0

@Jason McCreary - 是的,我已經提到,在第3點,它可以遞歸。 – Bibhu

+0

這不符合您的原始示例。但是我看到你在編輯中刪除了'-'和空格。所以現在他們是一致的。 –

回答

12

像這樣的東西應該工作:

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

Regexr Demo

  • ^ - 字符串
  • [-+/*]的開始 - 這些運營商
  • 之一
  • \d+ - 一個或多個數字
  • (\.\d+)? - 可選點後跟一個或多個數字
  • ()* - 整個表達式重複零次或多次
+2

+1實際*回答*問題。 –

+0

@Jason McCreary - 請看一下這個例子,我的意思是第一個' - '作爲一種非傳統的減法符號。 – Bibhu

+0

@Bibhu對,起初我假設它是一個簡單的連字符,並且你寫道它總是以操作符開頭,後面跟着一個數字,所以減號不適合:)。 – kapa

-1

如果你想陰性或陽性表達,你可以把它寫這樣>
^\-?[0-9](([-+/*][0-9]+)?([.,][0-9]+)?)*?$

與表達的第二個
^[(]?[-]?([0-9]+)[)]??([(]?([-+/*]([0-9]))?([.,][0-9]+)?[)]?)*$

隨着括號,但不指望你將需要數方法驗證它或正則表達式。 //方法

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