查找特定字符串在元胞数组中出现的行索引
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
.
我正在尝试查找特定字符串在元胞数组中出现的行索引列表。例如,对于以下元胞数组:
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
.