Конвертировать массив ячеек в массив ячеек строк в MATLAB - PullRequest
6 голосов
/ 12 апреля 2010

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

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 Ответ

12 голосов
/ 12 апреля 2010

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

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

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

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