假设我有一个字符串......
2*Math.sqrt(5265+Math.sin(53*2*Math.exp(3+(5+5)*3
我想通过使用正则表达式获取以下字符串...
2*Math.sqrt(5265)+Math.sin(53)*2*Math.exp(3)+(5+5)*3
因此,如果我是对的,我只需要将)
插入到一个字符串中,在一个未知长度的数字[0-9]和一个运算符之间,该运算符可以是* - / +
之一。
此外,我想知道是否(如何?)可以获得支持Math.pow
及以上示例的扩展版本。目前,我只使用单参数Math.*
方法,这些方法可以通过以上尚未实现的解决方案。但是如果我想使用Math.pow
怎么办呢?
所以我只想说,输入字符串就是例如......
2*Math.sqrt(5265+Math.sin(53*2*Math.exp(3+(5+5)*3*24Math.pow(3*5*Math.sin(5
我希望的输出看起来像...... 2*Math.sqrt(5265)+Math.sin(53)*2*Math.exp(3)+(5+5)*3*Math.pow(24,3)*5*Math.sin(5)
(我问,因为我希望将已修改的字符串传递给ScriptEngine
eval
。)
修改的
是的,对不起,我没有说清楚。我实际上并不关心我是否得到*2*
或*(2)*
,因为ScriptEngine的方法eval需要两者,而目前我无法想象这些形式有任何问题。
其次,我希望得到每个运算符* - / +
的通用解,上面提到的字符串只是示例。我会尝试更具体。所以现在忽略第二个Math.pow
部分,主要字符串,我们称之为A
,基本上由一个或多个字符串组成,形式如下......
{{1} },QWMath.[a-z](XWY
为Q
,[0-9]
为W
之一,* - / +
为X
。{{1} }和[0-9]
都是可选的,其中QW
是另一个Y
字符串或Y
,它使用A
运算符连接到上一个字符串。
但似乎femtoRgon用[0-9]
替换W
的解决方案是正常的。
对于Math.pow部分:除了(Math\.[a-z]+\(\d+)
中遗漏$1)
之外,用(\d+)(Math.pow\()(\d+)
替换$2$1$3)
的femtoRgon解决方案也没问题。它应为,
,其次是$2$1$3)
方法,我必须添加附加反斜杠:$2$1,$3)
,与replace
相同...
所以最后我觉得做这样的事情已经足够了......
(\\d+)(Math.pow\\()(\\d+)
......也许它可以短得多。当然,这不是确切的解决方案,但其余的只是一个装饰细节。
答案 0 :(得分:0)
根据您的解释,您的第一个案例听起来很简单。只需更换:
(\(\d*)
与
$1)
但是,这不会产生您想要的输出,但是insteead会给你:
2*Math.sqrt(5265)+Math.sin(53)*2*Math.exp(3)+(5)+5)*3
阻止您以这种方式转换(5+5)
的逻辑是什么?
也许你只想用Math.
的函数开始执行此操作?在这种情况下,您可以尝试替换:
(Math\.[a-z]+\(\d+)
与
$1)
不要运行两次。没有什么可以阻止将Math.pow(3)
更改为Math.pow(3))
要转换24Math.pow(3
中的Math.pow(24,3)
,您可以替换:
(\d+)(Math.pow\()(\d+)
与
$2$1$3)