拆分数学表达式?

时间:2016-07-31 10:45:18

标签: c# regex

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

3 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:2)

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

结果是:

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

此外,将@放在正则表达式字符串之前,以避免过多的转义。或者,使用双-转义\\

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

答案 2 :(得分:0)

对十进制值进行了小幅改进。
使用以下命令更新reg-x。

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