我尝试使用regexprep
来解决问题 - 我给了一个表示函数的字符串;它包含这样的模式:'sin(arcsin(f))'
其中f
- 任何子串;我需要用简单的'f_2'
替换它。我成功使用了regexprep
,除非我面对这样的字符串:
str = 'sin(arcsin(sin(arcsin(f_2))))*x^2';
str = regexprep(str, 'sin\(arcsin\((\w*)\)\)','$1');
它返回
str =
sin(arcsin(f_2))*x^2
但我希望它是
str =
f_2*x^2
有没有办法解决它(除了带有for循环的明显解决方案)。
答案 0 :(得分:1)
更改您的模式以搜索1个或更多(+
)嵌套sin(arcsin(
次出现:
str = 'sin(arcsin(sin(arcsin(f_2))))*x^2';
str2 = regexprep(str, '(sin\(arcsin\()+(\w*)(\)\))+','$2')
str2 =
f_2*x^2
答案 1 :(得分:1)
我无法测试这个,但我想我找到了一个表达式,你可以多次调用它来做你要求的事情;每次它将"剥离"您的等式中有一个sin(arcsin())
对。一旦它停止变化,你就完成了。
(.*)sin\(arcsin\((.*(\(.*?\))*)(\)\).*$)
这是一些Matlab代码,展示了这可能如何工作:
str = 'sin(arcsin(sin(arcsin(f_2))))*x^2';
regex = (.*)sin\(arcsin\((.*(\(.*?\))*)(\)\).*$);
oldlength = 0
newlength = length(str)
while (newlength != oldlength)
oldlength = newlength;
str = regexprep(str, regex,'$1$2');
newlength = length(str);
end
正如我所说 - 我无法测试这一点。如果您对此有任何问题,请告诉我。
正则表达式的演示: