Vectorized Search of substrings in Cell Array
Show older comments
I have a cell array of strings and I want to match substrings to produce a boolean vector to then extract the elements of interest.
I want strfind to behave like strcmp.
t = {'abcde','bcde','abc','ac'};
i = strcmp(t,'bcde')
0 1 0 0
for example - for 'bc', I want:
1 1 1 0
but using strfind, I get :
i = strfind(t,'bc')
[2] [1] [2] []
then:
~isempty(i)
1
or:
i==[]
but this returns: 'Undefined function 'eq' for input arguments of type 'cell'.'
I think cellfun() with strfind() and isempty() might work but I'm confused how to use it.
v= cellfun(@(x) strfind(t,'bc'), t, 'UniformOutput', false)
v =
{1x4 cell} {1x4 cell} {1x4 cell} {1x4 cell}
v{1}
ans =
[2] [1] [2] []
I want boolean array: [1 1 1 0]
Accepted Answer
More Answers (2)
the cyclist
on 18 Feb 2019
Here is one way:
cellfun(@(x)not(isempty(x)),strfind(t,'bc'))
the cyclist
on 19 Feb 2019
Discovered a much cleaner way:
contains(t,'bc');
1 Comment
Stephen23
on 20 Feb 2019
Note: requires R2016b or later.
Categories
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!