我有类似的字符串
@(foo) 5 + foo.^2
@(bar) bar(1,:) + bar(4,:)
并希望在整个字符串中用第一行括号(可能是任何东西)替换为x
@(x) 5 + x.^2
@(x) x(1,:) + x(4,:)
我认为使用regexprep
一步就能实现,但是在阅读了文档并摆弄了一段时间之后,我还没有找到可行的解决方案。
我知道,可以使用两个命令:首先,获取要与regexp
匹配的字符串,然后与regexprep
一起使用以替换所有出现的字符串。
但是,我有一种直觉,感觉到通过动态表达式和令牌等功能可以实现这种可能性。
答案 0 :(得分:1)
如果没有无限宽的后向支持,您将无法通过单次调用regexprep
一步完成。
使用第一个想法:提取第一个单词,然后在单词边界之间找到它们时将其替换为x
:
s = '@(bar) bar(1,:) + bar(4,:)';
word = regexp(s, '^@\((\w+)\)','tokens'){1}{1};
s = regexprep(s, strcat('\<',word,'\>'), 'x');
输出:@(x) x(1,:) + x(4,:)
^@\((\w+)\)
正则表达式在字符串的开头与@(
匹配,然后将字母数字或_
字符捕获到组1中,然后匹配)
。 tokens
选项允许访问捕获的子字符串,然后strcat('\<',word,'\>')
部分为regexprep
命令构建整个单词匹配的正则表达式。