【发布时间】:2016-01-13 22:28:08
【问题描述】:
我已经为此苦苦挣扎了很长一段时间(不是正则表达式忍者),搜索 stackoverflow 并尝试了一个错误。我想我已经接近了,但仍有一些小问题需要帮助解决。
要求包括变量、指数等的给定方程在变量、常量、值等之后被正则表达式模式分割。到目前为止我所拥有的
Regex re = new Regex(@"(\,|\(|\)|(-?\d*\.?\d+e[+-]?\d+)|\+|\-|\*|\^)");
var tokens = re.Split(equation)
所以一个方程比如
2.75423E-19* (var1-5)^(1.17)* (var2)^(1.86)* (var3)^(3.56)
应该解析为
[2.75423E-19 ,*, (, var1,-,5, ), ^,(,1.17,),*....,3.56,)]
但是,指数部分也被拆分,我认为这是由于正则表达式部分:|+|-。
我尝试过的其他版本是:
Regex re1 = new Regex(@"([\,\+\-\*\(\)\^\/\ ])"); and
Regex re = new Regex(@"(-?\d*\.?\d+e[+-]?\d+)|([\,\+\-\*\(\)\^\/\ ])");
两者都有缺陷。任何帮助将不胜感激。
【问题讨论】:
-
您打算如何消除负值和作为算术运算符的负数的歧义?还是这里不需要?顺便说一句,检查
[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[-^+*/()]|\w+是否与标记匹配。 -
恕我直言,我相信你最好看看适当的解析机制。
-
@stribizhev 您应该将其发布为答案,因为它正确标记了文本。顺便说一句,在算术解析中,您通常不处理负数标记,而是将数字视为带有一元减号运算符的正数。对于 OP,如果您需要编写自定义解析器,您可能会对我的 [this answer] 感兴趣,或者如果它符合您的需要,您可以使用类似 NCalc 的东西。
-
@LucasTrzesniewski:我实际上不确定我是否应该,但既然你认为我应该,我有:)
-
@stribizhev 我有一个额外的方法可以调整 urnary 运算符。