Matlab:如何用regexprep替换字符串的动态部分

时间:2019-10-10 10:26:09

标签: regex matlab

我有类似的字符串

@(foo) 5 + foo.^2
@(bar) bar(1,:) + bar(4,:)

并希望在整个字符串中用第一行括号(可能是任何东西)替换为x

@(x) 5 + x.^2
@(x) x(1,:) + x(4,:)

我认为使用regexprep一步就能实现,但是在阅读了文档并摆弄了一段时间之后,我还没有找到可行的解决方案。

我知道,可以使用两个命令:首先,获取要与regexp匹配的字符串,然后与regexprep一起使用以替换所有出现的字符串。

但是,我有一种直觉,感觉到通过动态表达式和令牌等功能可以实现这种可能性。

1 个答案:

答案 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命令构建整个单词匹配的正则表达式。

相关问题