我在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)
答案 0 :(得分:3)
我写了自己的正则表达式
我担心你的正则表达方式不会很远。一位智者曾经说过:
有些人在面对问题时会想到
我知道,我会使用正则表达式。
现在他们有两个问题。
结帐NCalc
。如果您想了解更多关于解析表达式所涉及的内容,您可以查看following article
。
如果您想自己实施,请查看Shunting-yard algorithm
。
更新:
对不起,我没有仔细阅读你的问题。您正在寻找正则表达式来解析像
这样的输入abs(z)
avg(x, 5, Ans2)
my2ndFunc(y - (x * 2))
您可以使用以下内容:
([a-z][a-z0-9]*)\((.+)\)