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(string) 转换回数字
。
关于具有重叠搜索结果的 MATLAB strrep 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14521682/