问题遇到的现象和发生背景
string Formula = “1+lg(10)*pow3(1)”;
这是一个计算公式形式的字符串
我想把里面的lg(10) 和pow3(1) 这两段字符提取出来
用C#的函数计算成数字以后,在替换到对应的位置
(中间的步骤 望各位 指点迷津)
最终就可以得到字符串:1+1*1
string Formula = “1+lg(10)*pow3(1)”;
这是一个计算公式形式的字符串
我想把里面的lg(10) 和pow3(1) 这两段字符提取出来
用C#的函数计算成数字以后,在替换到对应的位置
(中间的步骤 望各位 指点迷津)
最终就可以得到字符串:1+1*1
额,你这是问了一个很了不得的问题啊,能自己手动啃出来的,华为,BAT都可以随便进了
我们知道怎么弄,但是不会自己手动了,如果是学生到可以自己手动搞搞,能自己手动搞出来的学生,未来在这行基本不愁啥(提示:先把编译原理看完)
好了,废话不说了,直接给东西了
https://www.nuget.org/packages?q=expression+parser
//根据你的要求建议选第一个连接的东西,而且是最好能有VST树出来的东西,大多数成品都直接计算了,你想求字符串不是他们的第一目标,但是他们都会产生中间的VST树(无非是,是否把VST树开放出来),你借用VST树可以生成你要字符串
专业术语表达:词法分析,表达式分析,VST虚拟语法树
通用技术:YACC,Lex,Anltr4
应用层设计:词法规则,访问者模式
上面两个连接是 人们已经做好的一些东西
后面的术语和技术是专业从事这方面的人才需要掌握的
当然就问题本身,也许会有人告诉你直接正则替换,而正则其实也是词法分析,模式匹配的成果。不过是你就一个公式俺们正则一下应付应付可以,你要有100个公式token而且还能互相嵌套的话,简单正则可没办法
附加:看了一下nuget的列表
MathParser.org-mXparser 这个到实现的挺齐备的
虽然自定义函数,看着有些别扭(纯字符串实现,不知道是那个语法规则)
VST语法树没有明显给出,但弄个calculation-steps也能看
https://mathparser.org/mxparser-tutorial/calculation-steps-register/
当然不是说一定让你用这个,只是大体告诉你,这种东西一般是往这个方向走