我正在尝试查找特定字符串出现在单元格数组中的行索引列表。例如,对于以下单元格数组:
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()
操作,所以我怎么能实现这个呢?
答案 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