【发布时间】:2018-11-15 14:49:48
【问题描述】:
我想要一个可以检测最后一个数学表达式的正则表达式,以便更改该表达式的符号,例如:
5 --> -5
-5 --> 5
5+2*cos(10) --> 5-2*cos(10)
5-cos(10+2) --> 5+cos(10+2)
我仍然无法创建任何可以匹配最后一个表达式的正则表达式。我创建了这个正则表达式(\+[(cos|sin|tan)])+(.*[0-9]*.),但它只在存在 sin/cos 或 tan 时选择最后一个表达式。
【问题讨论】:
-
我认为正则表达式不能解决整个问题。您需要构建一棵树来表示所有操作以选择最后一个。
-
嗯,好的,谢谢。我想也许我错过了一些可能有帮助的正则表达式功能。
-
这将是一件疯狂的事情,但我看到的唯一正则表达式方法是构建一个具有替代匹配并捕获各种上下文的正则表达式,并在匹配评估器部分分析匹配结构并相应地替换。可能处理所有上下文的正则表达式是
(?:cos|sin|tan)\([^()]*\)|^(-)|^(\d)|([-+]) -
@WiktorStribiżew 谢谢我并没有义务遵循正则表达式我会尝试树解析。
-
为什么是正则表达式?您可以排序并取最后一个条目。