Преобразование массива ячеек в массив ячеек строк в MATLAB

используя regexp с токенами на массиве ячеек строк, у меня есть массив ячеек. Вот упрощенный пример:

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

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

Я знаю, что у меня есть только одно совпадение на строку ячейки в S. Как я могу преобразовать этот вывод в массивы ячеек строк в векторизованной форме?

1 ответов


проблема еще хуже, чем ты думал. Ваш вывод из REGEXP на самом деле является массивом ячеек массивов ячеек ячейки массивов строк! Да, три уровня! Следующие использует CELLFUN чтобы избавиться от двух верхних уровней, оставив только массив ячеек строк:

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

однако, вы также можете изменить ваш вызов REGEXP, чтобы избавиться от одного уровня, а затем использовать VERTCAT:

res = regexp(S,'(\d)','tokens','once');  %# Added the 'once' option
cellArrayOfStrings = vertcat(res{:});