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

Find row indices at which a specific string appears in a 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' 和 return 这些的行索引,我希望最终得到一个向量:

output =

        2   4   7

... 因为'Magic string'存在于input的第2、4、7行。

我已尝试执行以下操作:

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

但是,这在第二行失败了,因为当 cell2mat() 操作是 运行 时,它会删除所有的空格,而不是 returning NaN for这些细胞。我无法对元胞数组进行 运行 isnan() 操作,那么我该如何实现呢?

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

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 现在是一个元胞数组。你可以像这样得到行, 尽管单元格为空,但仍保留位置:

Indices = 

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

    Indices = ~cellfun(@isempty,Indices);

    %// Use find to get the rows:

    output = find(Indices)

给出:

output =

     2
     4
     7

输入

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 可以应用于不仅包含字符串的元胞数组。对于包含除字符串以外的任何内容的单元格,它只是 returns 0.