How to substitute numbers in a string with repeated strings?
5 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
German Preciat Gonzalez
il 8 Mag 2017
Modificato: Stephen23
il 9 Mag 2017
I have many different strings with different numbers with this format:
str='A + 2 B -> D + 3 E';
I would like to replace the numbers with repeated strings so I can have
str='A + B + B -> D + E + E + E';
I did it with so many lines but it looks so ugly and I would like to ask you if you know a better way
Thanks
1 Commento
Risposta accettata
Più risposte (2)
KL
il 8 Mag 2017
Modificato: KL
il 8 Mag 2017
something like this?
str={'A + 2 B -> D + 3 E'};
old = {'2', '3'};
new = {'B +','E +'};
for i=1:numel(old)
str = strrep(str,old(i),new(i))
if you really want to use character array, a little tweak will do,
str=['A + 2 B -> D + 3 E'];
old = {'2', '3'};
new = {'B +','E +'};
for i=1:numel(old)
str = strrep(str,old{i},new{i})
end
end
As Stephen mentioned, regexprep makes it even more easier without a loop,
str=['A + 2 B -> D + 3 E']
old = {'2', '3'}
new = {'B +','E +'}
newStr = regexprep(str,old,new)
4 Commenti
Rik
il 8 Mag 2017
My first thought is using repmat, but usually when my first thought is repmat, there is a better solution using sprintf. So someone might have a way faster and more elegant solution than this.
First use isstrprop to figure out the position of the digits ( ind=isstrprop(str,'digit'); ), then loop over the numbers ( for pos=length(find(ind)):-1:1 ) to replicate the correct part.
A more important question is your source. Can you prevent your source to output this format? That would make processing with Matlab less clunky and more clear cut.
0 Commenti
Vedere anche
Categorie
Scopri di più su Characters and Strings in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!