1

我正在用 C# 创建一个科学计算器,并且我有一组用户可以添加条目的线性函数。我需要预先解析一个数学表达式来检查这些函数以及其他数学函数的使用情况,跟踪函数的名称和 中的内容(...),并用它们的评估结果替换它们。

以这个表达式为例:

Ans1+(x*2)-(y^3)+abs(z)-avg(x, 5, Ans2)-my2ndFunc(y - (x * 2))

我写了我自己的正则表达式,我需要在等式中匹配这些:

abs(z) avg(x, 5, Ans2) my2ndFunc(y - (x * 2))

我使用Regex Tester v1.5.3对其进行了测试,但它根本不匹配任何项目。这是我使用的正则表达式:

\b([a-z][a-z0-9]*)\((..*)\)\b

什么正则表达式会匹配这些函数并存储函数名和参数内容?此外,如果有人提供有关如何进行匹配和获取捕获组内容的示例代码,那会很酷,但这不是必需的。

编辑 我不需要实际的数学解析器,我有实现调车场算法的muParser。我只需要做一个简单的搜索和替换,数学解析器负责实际的数学运算,我只需要正则表达式来查找要评估的部分。

我只需要一个简单的正则表达式来匹配: myfuncname(any content here)

4

1 回答 1

3

我写了自己的正则表达式

恐怕你不会用正则表达式走得很远。一位智者曾经说过:

有些人在遇到问题时会想

我知道,我会使用正则表达式。

现在他们有两个问题。

NCalc而是结帐。如果您想了解更多关于解析表达式所涉及的内容,您可以查看following article.

如果您想自己实现它,请查看Shunting-yard algorithm.


更新:

对不起,我没有仔细阅读你的问题。您正在寻找一个正则表达式来仅解析输入,例如

abs(z) 
avg(x, 5, Ans2) 
my2ndFunc(y - (x * 2))

您可以使用以下内容:

([a-z][a-z0-9]*)\((.+)\)
于 2013-01-15T22:24:08.503 回答