MATLABs strrep函数具有重叠的搜索结果

MATLABs strrep的做法与我预期的不同:

strrep('ababab', 'bab', 'bbb')

我希望字符串逐渐被替换,因此首先是abbbab而不是abbbbb.但是,MATLAB返回abbbbbb(注意最后的第6个b).

什么是MATLAB在幕后做什么?找到索引然后在每个索引处插入新字符串?完全不同的东西?

而且,最重要的是,我如何归档预期的结果?

确切地说,上面的示例只是减少其他错误来源的最小示例.在现实世界中,我想替换整数向量中的序列:

strrep([1 0 1 0 1 0],  [0  1 0], [0 0 0])

得到

1 0 0 0 0 0

最佳答案
Matlab’s documentation for strrep告诉你你需要知道什么.从页面底部的提示部分:

Before replacing strings, strrep finds all instances of oldSubstr in origStr, like the strfind function. For overlapping patterns, strrep performs multiple replacements. See the final example in the Examples section.

最后一个示例比较了strrep和regexprep的行为.我认为regexprep会在字符串上做你想要的.要处理数字,可以使用char(vector)转换为字符串,对其运行regexprep,然后使用double(字符串)转换回数字.

点赞