我有一个像这样的字符串单元格列表:
cellArr =
'folderName_fileName_no.jpg',
'folderName2_fileName2_no2.jpg'
我想要这样的
{folderName, fileName, no},
{folderName2, fileName2, no2}
如何在matlab中实现? 我知道我可以使用
regexp(cellArr, '_', 'split'),
但是如何使用多个分隔符?
我找到了..谢谢你的回复..
regexp(cellArr, '[_.]', 'split')
它与C语言的字符串标记化方法非常相似。使用
strtok
,您可以根据您选择的分隔符进行标记(在您的情况下为 '_')
注意,您将使用 C 习惯用法,在循环中对其剩余字符串重复调用
strtok
,因为它每次仅返回第一个标记。参考文献中给出了一个示例。
回答您的编辑:
对字符串元胞数组使用 strtok 会返回 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。 < To make it quite obvious, you just replace
strtok(remain)
与 strtok(remain,REQUIRED_DELIMITERS)
并添加简单的逻辑以删除文件扩展名。
使用
strsplit
也很有用:
cellArr =
'folderName_fileName_no.jpg',
'folderName2_fileName2_no2.jpg'
C = strsplit(cellArr,'_')
那么 C 是包含三个向量的元胞数组。如果需要删除不必要的部件(例如扩展件),也可以使用
filepath
。如果需要的话,strsplit
也可以与正则表达式一起使用!
我知道这已经非常古老了,但是对于任何可能正在搜索此内容的人来说,现在有一种方法可以仅使用 Matlab 中的常规“split”函数来完成此操作。
str = 'Hello my!friend'
newStr = split(str,[" ","!"])
将导致:
newStr =
3×1 cell array
{'Hello' }
{'my' }
{'friend'}