find indices of string matches from a cell array by thier endings
20 views (last 30 days)
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 ?
0 Comments
Accepted Answer
Chad Greene
on 20 Mar 2014
Edited: Chad Greene
on 20 Mar 2014
Do it without loops to make it a bit faster:
A={'aAbc' 'dgbc' 'bebd' 'fabc' 'fa ' 'abcd' 'abcdkads' 'a' 'snacks bc'};
myindices = ~cellfun(@isempty,regexp(A,'bc$'))
4 Comments
Chad Greene
on 21 Mar 2014
If regexp(A,'bc$') were an array of numbers, you could put it inside a function like isempty(regexp(A,'bc$')). However, regexp(A,'bc$') is not an array of numbers, it's an array of cells. You can operate on cells as if they were numbers if you use cellfun(@FUNCTION,...), hence, cellfun(@isempty,regexp(A,'bc$')).
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);
0 Comments
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.
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!