Matlab split string несколько разделителей

у меня есть список ячеек строк такой:

cellArr = 
      'folderName_fileName_no.jpg',
      'folderName2_fileName2_no2.jpg'

Я хочу, чтобы это было так

{folderName, fileName, no},
{folderName2, fileName2, no2}

как это сделать в MATLAB? Я знаю, что могу использовать

regexp(cellArr, '_', 'split'), 

но как я могу использовать более одного разделителя?

3 ответов


Я нашел его.. Спасибо за ответы..

regexp(cellArr, '[_.]', 'split')

это очень похоже на метод c токенизации строк. Используя strtok, вы можете токенизировать на основе любого выбранного вами разделителя (в вашем случае'_')

STRTOK ссылка

Примечание, Вы будете использовать идиому C многократного вызова strtok в цикле на оставшейся строке, так как он возвращает только первый токен каждый раз. Пример приведен в справке.

чтобы ответить на ваше редактирование:

использование strtok на Cell array of strings возвращает массив ячеек строк в token и массив символов в remain:

s = {'all in good time'; ...
 'my dog has fleas'; ...
 'leave no stone unturned'};

remain = s;

for k = 1:4
   [token, remain] = strtok(remain);
   token
end

прямо из примера 3 в справочнике. strtok(remain) С strtok(remain,REQUIRED_DELIMITERS) и добавьте тривиальную логику, чтобы удалить расширение файла.


это также полезно сделать с помощью strsplit:

cellArr = 
      'folderName_fileName_no.jpg',
      'folderName2_fileName2_no2.jpg'

C = strsplit(cellArr,'_')

затем C-это массив ячеек, содержащий три вектора. Также есть filepath Если необходимо удалить ненужные части, например расширения. strsplit также можно использовать с регулярным выражением, если это необходимо!