Matlab 分割字符串多个分隔符

问题描述 投票:0回答:4

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

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

我想要这样的

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

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

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

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

regex string matlab split tokenize
4个回答
12
投票

我找到了..谢谢你的回复..

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

0
投票

它与C语言的字符串标记化方法非常相似。使用

strtok
,您可以根据您选择的分隔符进行标记(在您的情况下为 '_')

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)
并添加简单的逻辑以删除文件扩展名。


0
投票

使用

strsplit
也很有用:

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

C = strsplit(cellArr,'_')

那么 C 是包含三个向量的元胞数组。如果需要删除不必要的部件(例如扩展件),也可以使用

filepath
。如果需要的话,
strsplit
也可以与正则表达式一起使用!


0
投票

我知道这已经非常古老了,但是对于任何可能正在搜索此内容的人来说,现在有一种方法可以仅使用 Matlab 中的常规“split”函数来完成此操作。

 str = 'Hello my!friend'
 newStr = split(str,[" ","!"])

将导致:

newStr =

   3×1 cell array

    {'Hello' }
    {'my'    }
    {'friend'}
© www.soinside.com 2019 - 2024. All rights reserved.