Changing letters to other letters with regexprep
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ryoma Kawakami
am 28 Sep. 2018
Kommentiert: Walter Roberson
am 28 Sep. 2018
I'm trying to change letters in a string to different ones with one line of code. I simplified my code down to the following:
regexprep('ab',{'a','b'},{'b','c'});
Ideally, this would output 'bc'. Currently, regexprep runs through the string twice and ends up outputting 'cc'.
Is there any way to prevent this from happening? Is it possible with regexprep? Also, I would prefer to keep the letters as strings, as I'm planning on using the 'preservecase' condition.
0 Kommentare
Akzeptierte Antwort
Stephen23
am 28 Sep. 2018
Bearbeitet: Stephen23
am 28 Sep. 2018
>> str = 'a':'z'
str = abcdefghijklmnopqrstuvwxyz
>> old = 'bcd';
>> new = 'abc';
>> [X,Y] = ismember(str,old);
>> str(X) = new(Y(X))
str = aabcefghijklmnopqrstuvwxyz
Note that this works efficiently for any characters, not just a limited subset. In order to use regexprep you would probably need to use a dynamic replacement expression.
1 Kommentar
Walter Roberson
am 28 Sep. 2018
Well, any characters representable in the first 65536 code points ;-) If you have codepoints beyond that, such as Linear B or CJK Unified Ideograms like ? then you would need more work.
Weitere Antworten (2)
OCDER
am 28 Sep. 2018
Note that regexprep will replace things Sequentially.
regexprep('ab',{'a','b'},{'b','c'});
ab -> bb -> cc
To fix, reverse order like this:
regexprep('ab',{'b', 'a'},{'c', 'b'});
ab -> ac -> bc
2 Kommentare
Walter Roberson
am 28 Sep. 2018
old = 'bcd';
new = 'abc';
lookup = char(0:255);
lookup(old+1) = new;
str = 'a':'z'
str = lookup(str+1)
You do not need to add 1 if you are willing to omit the possibility of char(0) being in the string.
2 Kommentare
Siehe auch
Kategorien
Mehr zu Variables finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!