Regex 如何解决用正则表达式进行加法

Regex 如何解决用正则表达式进行加法,regex,math,Regex,Math,我只想用加法得到数学方程,比如1+2+3,然后返回结果。我有下面的代码,问题是它不处理double(我不能写2.2+3.4) 我试图将正则表达式更改为([\+-]?\d+.\d+)([\+-])((\d+.\d+),但现在它不处理整数(我不能写2+4)。处理双精度和整数的正确正则表达式应该是什么?塔克斯 守则: regEx = new Regex(@"([\+-]?\d+)([\+-])(-?(\d+))"); m = regEx.Match(Expression

我只想用加法得到数学方程,比如1+2+3,然后返回结果。我有下面的代码,问题是它不处理double(我不能写2.2+3.4) 我试图将正则表达式更改为
([\+-]?\d+.\d+)([\+-])((\d+.\d+)
,但现在它不处理整数(我不能写2+4)。处理双精度和整数的正确正则表达式应该是什么?塔克斯 守则:

        regEx = new Regex(@"([\+-]?\d+)([\+-])(-?(\d+))");
        m = regEx.Match(Expression, 0);
        while (m.Success)
        {
            double result;
            switch (m.Groups[2].Value)
            {
                case "+":

                    result = Convert.ToDouble(m.Groups[1].Value) + Convert.ToDouble(m.Groups[3].Value);

                    if ((result < 0) || (m.Index == 0)) Expression = regEx.Replace(Expression, DoubleToString(result), 1);
                    else Expression = regEx.Replace(Expression, "+" + result, 1);
                    m = regEx.Match(Expression);
                    continue;
                case "-":
                    result = Convert.ToDouble(m.Groups[1].Value) - Convert.ToDouble(m.Groups[3].Value);
                    if ((result < 0) || (m.Index == 0)) Expression = regEx.Replace(Expression, DoubleToString(result), 1);
                    else Expression = regEx.Replace(Expression, "+" + result, 1);
                    m = regEx.Match(Expression);
                    continue;
            }
        }
        if (Expression.StartsWith("--")) Expression = Expression.Substring(2);
        return Expression;
    }
regEx=newregex(@“([\+-]?\d+)([\+-]((\d+));
m=regEx.Match(表达式,0);
while(m.Success)
{
双重结果;
开关(m.Groups[2]。值)
{
格“+”:
结果=Convert.ToDouble(m.Groups[1].Value)+Convert.ToDouble(m.Groups[3].Value);
如果((结果<0)| |(m.Index==0))表达式=regEx.Replace(表达式,DoubleToString(结果),1);
else表达式=regEx.Replace(表达式“+”+结果,1);
m=正则表达式匹配(表达式);
继续;
案例“-”:
结果=Convert.ToDouble(m.Groups[1].Value)-Convert.ToDouble(m.Groups[3].Value);
如果((结果<0)| |(m.Index==0))表达式=regEx.Replace(表达式,DoubleToString(结果),1);
else表达式=regEx.Replace(表达式“+”+结果,1);
m=正则表达式匹配(表达式);
继续;
}
}
if(Expression.StartsWith(“--”)Expression=Expression.Substring(2);
返回表达式;
}

正如评论所述,RegEx不是解决这个问题的好方法。使用简单的split语句(如果您只想支持
+
-
运算符)或实际的解析器(如果您想支持实际的数学表达式)会更好

但是,为了解释某些正则表达式,您的问题是
\d+。\d+
匹配“一个或多个数字,后跟任何字符,后跟一个或多个数字”。如果您给它一个大于99的整数,它将起作用,因为您匹配的是
(任何字符)而不是
\。
(特别是点字符)


更简单的版本是
[\d\.]+
,它匹配一个或多个数字或点。问题在于它允许多个点,因此
8.8.8.8
是有效匹配。所以您真正想要的是
\d+\.?\d*
,它匹配一个或多个数字、一个或零个点以及零个或多个数字。因此,
2
2.
2.05
都是有效的匹配项。

使用String.Split()这样的东西不是更容易吗?你必须坚持使用正则表达式吗?对每个问题应用
regex
解决方案是一个非常糟糕的主意……正如Egor所建议的,你不要使用
Split
函数!如果您想尝试编写能够解析和计算许多数学表达式的内容,请务必编写一个解析器。