How to replace specific characters in a cell array?
26 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ivan Mich
am 2 Mär. 2023
Bearbeitet: Stephen23
am 18 Mär. 2023
I have a question about a code.
I have a cell array with strings and I would like to replace the last 5 characters with another for every cell array. I tried strrep but no use.
For example I have an array:
A={'MATHIEW','NIKOLIEW','SAMIEW','SAMOURAI'}.
I would like to replace ONLY in the strings that their last 3 characters have the elen\ments: IEW, with the elements 'YAU'.
I mean that I want my final array to be:
B={'MATHYAU','NIKOLYAU','SAMYAU','SAMOURAI'}.
Could you please help me?
2 Kommentare
Akzeptierte Antwort
Image Analyst
am 4 Mär. 2023
B={'MATHIEW','NIKOLIEW','SAMIEW','SAMOURAI'}
for k = 1 : numel(B)
if endsWith(B{k}, 'IEW', 'IgnoreCase', true)
B{k}(end-2 : end) = 'YAU';
end
end
B % Show in command window
3 Kommentare
Weitere Antworten (3)
the cyclist
am 4 Mär. 2023
Bearbeitet: the cyclist
am 4 Mär. 2023
With the additional description you added that clarified the problem, you can do this very easily with regexprep:
A = {'MATHIEW','NIKOLIEW','SAMIEW','SAMOURAI','IEWBLAHIEW'};
B = regexprep(A,'IEW$','YAU')
Note that this solution only replaces instances of IEW that occur at the end of the character array. (I added a case to illustrate that.)
0 Kommentare
the cyclist
am 2 Mär. 2023
Bearbeitet: the cyclist
am 2 Mär. 2023
Assuming you have character array elements, and not strings, here is one way:
% Inputs
CC_in = {'abcdeABCDE','xyzFGHIJ'};
replacementStr = '12345';
% Output
CC_out = cellfun(@(x) [x(1:end-5) replacementStr],CC_in,'UniformOutput',false)
This could be generalized, for example to automatically read the length of the replacement string:
% Inputs
CC_in = {'abcdeABCDE','xyzFGHIJ'};
replacementStr = '12';
% Output
L = numel(replacementStr);
CC_out = cellfun(@(x) [x(1:end-L) replacementStr],CC_in,'UniformOutput',false)
2 Kommentare
Stephen23
am 2 Mär. 2023
Bearbeitet: Stephen23
am 3 Mär. 2023
"This is arguably a better approach"
Agreed. In fact the MATLAB documentation is even stronger even than that, it specifically recommends against storing string scalars in a cell array:
"When you have multiple strings, store them in a string array, not a cell array. ... String arrays are more efficient than cell arrays for storing and manipulating text. ... Avoid using cell arrays of strings. When you use cell arrays, you give up the performance advantages that come from using string arrays."
Venkatanarasimha Hegde
am 18 Mär. 2023
Bearbeitet: Venkatanarasimha Hegde
am 18 Mär. 2023
A = {'MATHIEW','NIKOLIEW','SAMIEW','SAMOURAI','IEWBLAHIEW'};
for i = 1:length(A)
temp = A{i};
if strcmp(temp(end-2:end),'IEW')
temp(end-2:end) = 'YAU';
end
A{i} = temp;
end
disp(A)
This is a much simpler version using loops. Even beginners can try to implement such codes who don't know much about regexp or complicated constructs.
Siehe auch
Kategorien
Find more on Characters and Strings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!