6

Using regexp with tokens on cell array of strings I've got cell array of cells. Here is simplified example:

S = {'string 1';'string 2';'string 3'};
res = regexp(S,'(\d)','tokens')
res = 

    {1x1 cell}
    {1x1 cell}
    {1x1 cell}
res{2}{1}
ans = 
    '2'

I know I have only one match per cell string in S. How I can convert this output into cell arrays of strings in a vectorized form?

1 Answer 1

12

The problem is even worse than you thought. Your output from REGEXP is actually a cell array of cell arrays of cell arrays of strings! Yeah, three levels! The following uses CELLFUN to get rid of the top two levels, leaving just a cell array of strings:

cellArrayOfStrings = cellfun(@(c) c{1},res);

However, you can also change your call to REGEXP to get rid of one level, and then use VERTCAT:

res = regexp(S,'(\d)','tokens','once');  %# Added the 'once' option
cellArrayOfStrings = vertcat(res{:});
Sign up to request clarification or add additional context in comments.

2 Comments

@gnovice: You are right about those levels. I think the second solution is better for the speed and clearness. Thanks again.
@gnovice: I don't know how often I have read the documentation of regexp - yet I haven't noticed the 'once' option. Thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.