Используя 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. Как я могу преобразовать этот вывод в массивы ячеек строк в векторизованной форме?
Проблема еще хуже, чем вы думали. Выходные данные из REGEXP на самом деле есть массив ячеек массивов ячеек массивов ячеек строк! Да, три уровня! Ниже приведено использование CELLFUN, чтобы избавиться от двух верхних уровней: оставляя только массив строк ячеек:
cellArrayOfStrings = cellfun(@(c) c{1},res);
Однако вы также можете изменить вызов на REGEXP, чтобы избавиться от одного уровня, а затем использовать VERTCAT:
res = regexp(S,'(\d)','tokens','once'); %# Added the 'once' option
cellArrayOfStrings = vertcat(res{:});