matching texts in two cell arrays

I have two cell arrays, one longer than the other. Both containing strings. The shorter cell array contain only part of a name of one of the cell in the longer cell array. Can I match each individual cells in the shorter cell arrays to find the index of the full name in the cell array. for example;
shortcellarray = {'Micheal' 'John' 'Eric'};
longcellarray = {'Lisa Ann' 'Michael Adams' 'Art Vara' 'Brian Burns' 'Eric Holmes'};
how do I get the index of the long array from the match of short array (without loop iteration, which I know can be done with strfind on each cell within the shortarray)? The answer should be:
index = {2, [], 5}
Thanks.

 Accepted Answer

I'm totally sure that much better solutions will be given, but one reads as:
index = cellfun(@(a) strmatch(a,longcellarray),shortcellarray,'uniform',false)
index =
[2] [0x1 double] [5]
Best regards, Michael

2 Comments

(I fixed the first value of shortcellarray to "Michael" instead of "Micheal")
This works great for me.
Thanks for the respond. I think cellfun function looks very useful, and I need to get better at using it.
Thanks.

Sign in to comment.

More Answers (1)

you can do this
shortcellarray = {'Michael' 'John' 'Eric'};
longcellarray = {'Lisa Ann' 'Michael Adams' 'Art Vara' 'Brian Burns' 'Eric Holmes'};
for ind =1:length(shortcellarray)
IndexC = strfind(longcellarray, cell2mat(shortcellarray(ind)));
Index{1,ind} = find(not(cellfun('isempty', IndexC)));
end
the strfind works within cells.

1 Comment

Using a loop would definitely work, and that is what i have, but I was looking for a better way to do this.
Thanks.

Sign in to comment.

Categories

Asked:

Quy
on 22 Jul 2014

Commented:

Quy
on 22 Jul 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!