2012-10-31 19 views
8

Ich habe eine Zelle Liste von Strings wie folgt aus:Matlab Split-String mehrere Trennzeichen

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

Ich möchte um es zu bekommen, wie diese

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

Wie es in Matlab zu tun? Ich weiß, ich

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

verwenden kann, aber wie kann ich mehr als ein Trennzeichen?

+0

Haben Sie schon gehört von 'fileparts',' fullfile', 'pathsep' und ähnliche Werkzeuge? Diese Tools verhindern wahrscheinlich das ganze Problem ... –

Antwort

11

Ich fand es .. Danke für die Antworten ..

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

Es ist sehr ähnlich der C-Methode der String-Tokenization. Mit strtok können Sie basierend auf tokenize Unabhängig davon, welche Trennzeichen Sie wählen (in Ihrem Fall ‚_‘)

STRTOK reference

Hinweis, werden Sie die C Idiom verwenden wiederholt strtok in einer Schleife auf seiner restlichen Zeichenfolge als es ruft gibt jedes Mal nur das erste Token zurück. Ein Beispiel ist in der Referenz angegeben.

Ihre EDIT zu beantworten:

auf einer Zelle Array von Strings gibt eine Zelle Array von Strings in Token und ein Zeichenarray Mit strtok in bleiben:

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 

gerade aus Beispiel 3 in der Referenz. < Um es ganz offensichtlich zu machen, ersetzen Sie einfach strtok(remain) durch strtok(remain,REQUIRED_DELIMITERS) und fügen Sie triviale Logik hinzu, um die Dateierweiterung zu löschen.

+0

Wie kann ich REQUIRED_DELIMITERS verwenden? Könnten Sie mir bitte ein Beispiel geben? – user570593

+0

@ user570593 REQUIRED_DELIMITERS in Ihrem Fall wäre '_.', Eine Zeichenfolge, die alle Begrenzer enthält. –

Verwandte Themen