Matlab如何将字符串按多个分隔符拆分?

9

我有一个像这样的字符串单元格列表:

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

我希望能够像这样获得它

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

如何在matlab中实现? 我知道可以使用


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

但是如何使用多个分隔符呢?


1
你听说过 filepartsfullfilepathsep 和类似的工具吗?这些工具很可能可以避免整个问题... - Rody Oldenhuis
3个回答

12

我找到了.. 感谢回复..

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

0

这与 C 语言中的字符串分词方法非常相似。使用 strtok,您可以根据任何分隔符(在您的情况下为“_”)进行分词。

STRTOK 参考

请注意,您将使用 C 语言中重复调用 strtok 的习惯用法,在其剩余字符串上循环调用,因为每次仅返回第一个标记。参考文献中提供了一个示例。

回答您的编辑:

对字符串单元数组使用 strtok 将返回一个标记的字符串单元数组和一个 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),并添加简单的逻辑以删除文件扩展名即可。


我如何使用REQUIRED_DELIMITERS?您能举个例子吗? - user570593
@user570593 在你的情况下,REQUIRED_DELIMITERS 应该是 '_.', 一个包含所有分隔符的字符串。 - im so confused

0

使用strsplit也很有用:

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

C = strsplit(cellArr,'_')

那么C就是一个包含三个向量的单元数组。如果需要删除不必要的部分,例如扩展名,则可以使用filepath。如果需要,可以使用正则表达式的strsplit


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接