find indices of string matches from a cell array by thier endings
Show older comments
I want to find the indices of a cell array whose memembers end with a specific string. Eg.
A={'aAbc' 'dgbc' 'bebd' 'fabc' 'fa '}
Now if I want to find out the indices of the strings which end either with two characters'bc' or ' ' (empty), which command in Matlab would be suitable for this ?
Accepted Answer
More Answers (3)
Jos (10584)
on 21 Mar 2014
You can use REGEXP to find a specific string property. Moreover you can combine various properties using the separator |
A={'aAbc' 'dgbc' 'bebd' 'fabc' 'fa '}
indexA = find(~cellfun(@isempty, regexp(A,'bc$| $')))
1 Comment
Chad Greene
on 21 Mar 2014
Ah, good thinking. I knew there'd be a way to include the or operator in regexp.
Sara
on 20 Mar 2014
strcmp or strcmpi
Example of how you could do it (not elegant but works):
A={'aAbc' 'dgbc' 'bebd' 'fabc' 'fa '};
str = 'bc';
index = zeros(length(A),1);
str_length = length(str);
for i = 1:length(A)
k1 = strcmp(A{i}(end-str_length+1:end),str);
k2 = strcmp(A{i}(end-str_length+1:end),blanks(str_length));
if(k1 ~= 0 || k2 ~= 0)
index(i) = i;
end
end
index = index(index>0);
Dishant Arora
on 20 Mar 2014
A = {'aAbc' 'dgbc' 'bebd' 'fabc' 'fa '};
fun = @(x) (length(x) == regexp(x , 'bc' , 'end'))
B = cellfun(fun,A,'Un',0);
for ii=1:length(B)
if isempty(B{ii})
B{ii} = false;
end
end
Idx = A(cell2mat(B))
There might be better ways to do it, but this is what I come up with.
Categories
Find more on Characters and Strings in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!