拆分数学表达式?

问题描述:

我想写一个计算软件,对于我使用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,我不使用计算 –

您可以使用此表达式:

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 
) 

删除+,因为所有你匹配的运营商是单字符。不要忘记逃脱-,它应该是\-。也没有必要用逗号和引号。

结果是:

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

此外,把@正则表达式字符串之前,以避免过多的转义。或者,逃避-\\

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

但我得到一个错误:无法识别的转义序列==>“\ - ” –

+0

@alex请参阅编辑。 – nicael