フィルターのクリア

Replace multiple substrings within a string

4 ビュー (過去 30 日間)
Håkon Haavik  Nystad
Håkon Haavik Nystad 2018 年 1 月 13 日
コメント済み: Stephen23 2018 年 1 月 15 日
I have a string of letters where i want to replace every A with 'BRARB' and every B with 'ALBLA'. I want to do this so that the Bs in 'BRARB' that was replaced by A in the current iteration, are not changed into 'ALBLA'. In other words,
function X=LindIter(N)
X='A';
for i=1:N
%if a letter in the string i A, replace it with BRARB, if it is B, replace with ALBLA.
X=strrep(X, 'A', 'BRARB');
end
As the code is now, it only replaces A with BRARB. The output, if N=1 should be BRARB, and if N=2 it should be ALBLARBRARBRALBLA

回答 (2 件)

Stephen23
Stephen23 2018 年 1 月 13 日
編集済み: Stephen23 2018 年 1 月 13 日
Method one: for loop and indexing:
S = 'A'
for k = 1:3
C = num2cell(S);
C(S=='A') = {'BRARB'};
C(S=='B') = {'ALBLA'};
S = [C{:}]
end
Giving:
S = A
S = BRARB
S = ALBLARBRARBRALBLA
S = BRARBLALBLALBRARBRALBLARBRARBRALBLARBRARBLALBLALBRARB
Method two: in one line using regexprep, arrayfun, and cell2mat:
>> fun = @(s)cell2mat(arrayfun(@(c)regexprep(c,{'A','(?<!R)B(?!R)'},{'BRARB','ALBLA'}),s,'uni',0));
>> S = 'A';
>> S = fun(S)
S = BRARB
>> S = fun(S)
S = ALBLARBRARBRALBLA
>> S = fun(S)
S = BRARBLALBLALBRARBRALBLARBRARBRALBLARBRARBLALBLALBRARB
...etc

Roy Kadesh
Roy Kadesh 2018 年 1 月 13 日
function X=LindIter(N)
X='A';
for i=1:N
%replace A with BRARB, replace B with ALBLA.
X(X=='A')='1';
X(X=='B')='2';
X=strrep(X, '1', 'BRARB');
X=strrep(X, '2', 'ALBLA');
end
  4 件のコメント
Guillaume
Guillaume 2018 年 1 月 15 日
Well, yes, you can't use simple indexing and have to do some splitting and reconcatenation instead, but it will be a lot more realiable.
Stephen23
Stephen23 2018 年 1 月 15 日
"So how would you use a queried position?"
See the first method in my answer.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by