当前有/([^\s\+\(]+)\^([^\s\,\+\)]+)/g
可以将x^y
转换为pow(x,y)
。
适用于:
y = x
y = x^2
y = x^2 + y^2
y = 5*(x^2 + y^2)
y = (x^2 + y^2)
y = pow(x^2+y^2, 2)
但是我希望能够做这样的事情:
y = abs(x)^2 --> y = pow(abs(x), 2)
我目前在第一个被否定的捕获组中有\(
,可以防止5*(x^2)
陷入混乱,但是我真正想做的是将*(
配对为一个,因此括号是仅在带有括号之后才被否定。
是否有一种方法可以否定特定结果字符的出现?
答案 0 :(得分:1)
我们可以完全避免使用高级正则表达式功能,并为函数参数添加一个简单的替代:
(\w+\([^\s+()]+\)|[^\s+()]+)\^(\w+\([^\s+()]+\)|[^\s,+()]+)
实际上,这不仅应该添加到第一个参数,因为第二个参数也可以是一个函数。
这里的基本思想是分别捕获函数和常规参数。
(
捕获组1 (\w+\([^\s+()]+\)
捕获类似abs(-4)
的函数:
\w+
寻找一个或多个字母([a-zA-Z0-9_]
)[^\s+()]+
然后是内容:不是空格或()
的所有内容\)
和右括号。|
交替[^\s+()]+
常规参数)
结束$ 1 然后是\^
,然后是第二个采用相同方法的捕获组。