Replace multiple substrings within a string
Mostrar comentarios más antiguos
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
Respuestas (2)
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
el 13 de En. de 2018
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 comentarios
Guillaume
el 13 de En. de 2018
This will of course fails if '1' or '2' is present in the original string. You could of course use any other character guaranteed not to be present in the original string, if one exist (with arbitrary input there's isn't such a guarantee) but why bother with the unneeded replacement step. Just query the position and use that.
Roy Kadesh
el 13 de En. de 2018
The problem with using position, is that you are replacing it with a longer array, and X(1)='BRARB'; will of course return an error. So how would you use a queried position?
Guillaume
el 15 de En. de 2018
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
el 15 de En. de 2018
"So how would you use a queried position?"
See the first method in my answer.
Categorías
Más información sobre Characters and Strings en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!