拆分数学表达式?
问题描述:
我想写一个计算软件,对于我使用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;
}
}
}
答
您可以使用此表达式:
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
你可以计算字符串的结果'5 * 10 18 /(3 + 19)'没有做这一切。如果那是你的追求。 – user3185569
@ user3185569,我不使用计算 –