Vectorized Search of substrings in Cell Array

2 views (last 30 days)
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

Stephen23
Stephen23 on 18 Feb 2019
>> t = {'abcde','bcde','abc','ac'};
>> ~cellfun(@isempty,strfind(t,'bc'))
ans =
1 1 1 0

More Answers (2)

the cyclist
the cyclist on 18 Feb 2019
Here is one way:
cellfun(@(x)not(isempty(x)),strfind(t,'bc'))

the cyclist
the cyclist on 19 Feb 2019
Discovered a much cleaner way:
contains(t,'bc');

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!