2016-07-31 85 views
0

我想寫一個計算軟件,對於我使用Regex.Matches()的操作員的單獨數字,但是存在一個使用圖像顯示的錯誤。此外,數學表達式爲:拆分數學表達式?

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

你可以計算字符串的結果'5 * 10 18 /(3 + 19)'沒有做這一切。如果那是你的追求。 – user3185569

+0

@ user3185569,我不使用計算 –

回答

4

您可以使用此表達式:

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

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

結果:

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

刪除+,因爲所有你匹配的運營商是單字符。不要忘記逃脫-,它應該是\-。也沒有必要用逗號和引號。

結果是:

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

此外,把@正則表達式字符串之前,以避免過多的轉義。或者,逃避-\\

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

但我得到一個錯誤:無法識別的轉義序列==>「\ - 」 –

+0

@alex請參閱編輯。 – nicael