Matlab在单元格数组中查找字符串

时间:2016-03-10 10:00:15

标签: arrays string matlab cell

我有一个包含字符串和单元格的单元格数组(n-by-1维度),看起来像这样

{
{'r1'}     % -> cell content is in format 'char'
{'r2'}     % -> cell content is in format 'char'
{1x2 cell} % -> cell content is a cell array: [{'r1'}{'r2'}]
{'r3'}     % -> cell content is in format 'char'
{1x2 cell} % -> cell content is a cell array: [{'r1'}{'r3'}]
{1x2 cell} % -> cell content is a cell array: [{'r2'}{'r3'}]
{1x3 cell} % -> cell content is a cell array: [{'r1'}{'r2'}{'r3'}]
...
} 

我需要找到包含某些字符串的行索引,例如' R 2&#39 ;.我通常使用strfind来达到这个目的,如果单元格数组具有一致的格式(因此每个单元格中都有' char' -format),这种方法很有用。

有没有办法将此函数应用于上面显示的单元格数组结构?

谢谢!

编辑:请找到显示我正在使用的数据结构的附加三个图像,因为我不确定如何在文本中准确显示/解释单元格数组的层次结构和层。希望有所帮助。还可以找到附加代码的结果。

使用的代码:

change = 'r1.m';
srch = cellfun(@(x) strfind(x, change), strats, 'UniformOutput', false);
stringInRow = cellfun(@(x) numel(x) == 1 || (numel(x)>1)*numel(cell2mat(x))>0, srch);
rows = find(stringInRow);

cell array

example of cell array within cell 5,1

last "layer" in char format

outcome in 'srch'

outcome of logical operation on srch

1 个答案:

答案 0 :(得分:3)

您可以使用两个后续的cellfun调用:一个用于执行字符串搜索(逐个单元格),另一个用于评估它(找到字符串true或不是false?)< / p>

%// example data
c{1} = 'r1';     
c{2} = 'r2';    
c{3}{1} = 'r1'; c{3}{2} = 'r2';
c{4} = 'r3';
c{5}{1} = 'r1'; c{5}{2} = 'r3';

%// example search
searchForString = 'r2';
srch = cellfun(@(x) strfind(x, searchForString), c, 'UniformOutput', false);
stringInRow = ...
  cellfun(@(x) numel(x) == 1 || (numel(x)>1)*numel(cell2mat(x))>0, srch);
               %// ^-. short-circuit scalars here     ^
               %//                                    |
               %// since cell2mat is valid only for cells or empty arrays

结果为stringInRow

stringInRow =

     0     1     1     0     0

如果要明确列出行,可以在find布尔向量上使用stringInRow

>> foundStringInRows = find(stringInRow)

foundStringInRows =

     2     3