在MATLAB中将单元格数组转换为字符串单元格数组

6
使用正则表达式处理字符串数组中的标记 单元格数组如下,示例仅供参考:
S = {'string 1';'string 2';'string 3'};
res = regexp(S,'(\d)','tokens')
res = 

    {1x1 cell}
    {1x1 cell}
    {1x1 cell}
res{2}{1}
ans = 
    '2'

我知道在S中每个单元格字符串只有一个匹配项。如何将此输出转换为向量化形式的字符串单元格数组?

1个回答

12
问题比你想象的还要严重。从REGEXP得到的输出实际上是一个字符串的单元格数组,其中每个单元格又包含了一个字符串的单元格数组,而这些单元格数组又各自包含了一个字符串的单元格数组!是的,总共有三层嵌套!以下代码使用CELLFUN来去除最上面两层,只留下一个字符串的单元格数组:

cellArrayOfStrings = cellfun(@(c) c{1},res);

然而,您也可以更改调用 REGEXP 的方式来减少一级,然后使用VERTCAT:

res = regexp(S,'(\d)','tokens','once');  %# Added the 'once' option
cellArrayOfStrings = vertcat(res{:});

@gnovice:你对那些级别的理解是正确的。我认为第二种解决方案在速度和清晰度方面更好。再次感谢。 - yuk
1
@gnovice:我不知道我已经多少次阅读了regexp的文档 - 但我还没有注意到“once”选项。谢谢! - Jonas

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