【问题标题】:How to search for a specific string in cell array如何在元胞数组中搜索特定字符串
【发布时间】:2016-09-05 03:55:11
【问题描述】:

我想在 matlab 单元格中搜索一个特定的字符串。例如,我的单元格包含一列这样的字符串

variable(:,5) = {'10';'10;20';'20';'10;20';'10';'10';'20'};

我想搜索所有只有'10' 的单元格并删除它们。

我尝试使用此语句进行搜索

is10 = ~cellfun(@ isempty , strfind (variable(:,5) , '10'));

但这会返回所有带有'10' 的单元格(包括带有'10;20' 的单元格)。

我希望只有具有纯 '10' 值的单元格

最好的方法是什么?

【问题讨论】:

    标签: string matlab cell


    【解决方案1】:

    因为strfind 允许部分 字符串匹配,所以它没有按预期工作。你想要的是一个 exact 匹配。您可以使用strcmp 执行此操作。此外,strcmp 的输入实际上可以是字符串元胞数组,因此您可以按以下方式使用它。

    A = {'10';'10;20';'20';'10;20';'10';'10';'20'};
    is10 = strcmp(A, '10');
    %// 1  0  0  0  1  1  0
    

    您也可以使用ismember 来做同样的事情。

    is10 = ismember(A, '10');
    %// 1  0  0  0  1  1  0
    

    附带说明一下,大多数字符串函数(包括strfind)实际上都可以接受字符串元胞数组作为输入。所以在你最初的帖子中,strfind 内部的包装 cellfun 是不必要的。

    【讨论】:

    • 要跳过一个步骤,您可以使用A(strcmp(A,'10')) = [],以便立即删除不需要的单元格。
    • @JCKaz 从技术上讲,这并没有跳过任何步骤,它只是执行 next 步骤。如果你真的想跳过一个步骤,你可以使用regexp 返回一个非'10's 的元胞数组
    • strfind 是否返回逻辑?
    • 你是对的@Suever。 “跳线”更准确。
    • @EyesOfÖzil 你可以用谷歌搜索并查看文档来回答这类问题(答案是no)
    猜你喜欢
    • 2011-12-25
    • 2012-03-14
    • 2015-05-12
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2015-04-23
    • 2011-11-17
    相关资源
    最近更新 更多