gpt4 book ai didi

c# - 基于正则表达式的数值表达式求解器

转载 作者:行者123 更新时间:2023-11-30 22:23:33 25 4
gpt4 key购买 nike

我正在使用正则表达式制作一个简单的数值表达式求解器,现在我正在努力将多项式分解成它的项。所以这就是我到目前为止得到的:

(.*?)([\+-](.*?))+

当涉及负数时,这不起作用。以3*-2+1为例:我得到的项是3*、-2和+1,这显然是错误的。
我想我可以在标志前用负面的目光逃避,这样前面有 * 或/的标志就被丢弃了:

(.*?)((?<![\*/])[\+-](.*?))+

但这甚至不适用于正数

建议?

最佳答案

希望您没有花很多时间创建自己的解析器;)

我使用这段代码来评估表达式:

class Program
{
public static double Evaluate(string expression)
{
using (var stringReader = new StringReader("<dummy/>"))
{
var navigator = new XPathDocument(stringReader).CreateNavigator();
expression = Regex.Replace(expression, @"([\+\-\*])", " ${1} "); // add some space
expression = expression.Replace("/", " div ").Replace("%", " mod ");
return (double)navigator.Evaluate(string.Format("number({0})", expression));
}
}

static void Main(string[] args)
{
Console.WriteLine(Evaluate("3*-2+1"));
}
}

将输出:-5

它基于 XPathNavigator.Evaluate方法。正则表达式在输入中添加了一些空格,然后替换了除法和取模符号。

关于c# - 基于正则表达式的数值表达式求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com