查找特定字符串出现在单元格数组中的行索引

时间:2015-02-05 20:27:20

标签: arrays string matlab cell-array

我正在尝试查找特定字符串出现在单元格数组中的行索引列表。例如,对于以下单元格数组:

input = {[546]   'Blah blah blah'
         [783]   'Magic string'
         [1341]  'Blah, blah, other stuff'
         [1455]  'Magic string'
         [1544]  'Another irrelevant string'
         [1700]  'Yet another pointless string'
         [1890]  'Magic string'}

...如果我想找到字符串'Magic string',并返回这些字符串的行索引,我希望最终得到一个向量:

output =

        2   4   7

...因为'Magic string'的第2行,第4行和第7行存在input

我尝试过以下操作:

output = strfind({input{:,2}},'Magic string');
output = cell2mat(output);
output = find(output);

但是,这在第二行失败,因为在运行cell2mat()操作时,它会删除所有空白,而不是为这些单元格返回NaN。我无法在单元阵列上运行isnan()操作,所以我怎么能实现这个呢?

2 个答案:

答案 0 :(得分:1)

输入

input = {[546]   'Blah blah blah'
         [783]   'Magic string'
         [1341]  'Blah, blah, other stuff'
         [1455]  'Magic string'
         [1544]  'Another irrelevant string'
         [1700]  'Yet another pointless string'
         [1890]  'Magic string'}

只需使用

output = find(strcmp(input(:,2), 'Magic string'));

或者,如果字符串可以出现在任何列中,

output = find(any(strcmp(input, 'Magic string'), 2));

关键是strcmp可以应用于不仅包含字符串的单元格数组。对于包含除字符串以外的任何内容的单元格,它只返回0

答案 1 :(得分:0)

您可以使用正则表达式来解析单元格数组:

clear
clc
input = {[546]   'Blah blah blah'
        [783]   'Magic string'
        [1341]  'Blah, blah, other stuff'
        [1455]  'Magic string'
        [1544]  'Another irrelevant string'
        [1700]  'Yet another pointless string'
        [1890]  'Magic string'}


    CheckString = 'Magic string';

    %// Check for the string of interest
    Indices = regexp(CheckString,input(:,2))

指数现在是一个单元格数组。你可以得到这样的行, 尽管空单元格保留了位置:

Indices = 

    []
    [1]
    []
    [1]
    []
    []
    [1]

    Indices = ~cellfun(@isempty,Indices);

    %// Use find to get the rows:

    output = find(Indices)

给出了:

output =

     2
     4
     7