在 MatLab 单元格中找到一个 str

finding a str in MatLab cells

我目前正在使用 MatLab R2014a

我有一个数组和一个单元格:

MyArray = ['AA1', 'AA2', 'AB1', 'AB2', 'Acc1', 'Acc2'];


MyCell = {'Name1AA1', 'Name2AA1', 'Name3Acc2', 'Name4AB2', 'Name5AD1};

MyArray 由在整个 MyCell 中可重复的代号组成。 我想检查 MyArray 中的任何字符串是否在 MyCell 中,如果是,将名称保存到新单元格。

现在我有:

NewCell = {};
for i = 1:length(MyCell)
    for j = 1:length(MyArray)
        Find = strfind(MyCell(i), MyArray)
        if ~isempty(Find)
            NewCell = {NewCell; MyCell(j)}
        end
    end
end

但是,当我使用 strfind 时,我得到了这个错误信息:

'char'

类型的输入参数未定义函数 'strfind'

如果我使用 strcmp 而不是 strfind,我会得到一个数组,其中包含 MyCell 中的所有内容,重复次数为 MyArray 中的元素数。

我的理想输出是:

NewCell1 = {'Name1AA1', 'Name2AA1'}
NewCell2 = {'Name4AB2'}
NewCell3 = {'Name3Acc2'}

即,MyArray 中不存在的代码名称没有新单元格,或者如果 MyArray 中有代码名称但 MyCell 中没有,则没有新单元格。

欢迎任何帮助,感谢您的宝贵时间

您可以使用正则表达式的组合来实现所需的输出。不推荐您想要动态命名变量的方法,这会导致代码更难调试。请改用索引。

您可以在 Matlab 的论坛上阅读 this 信息 post 以了解原因。

%Your input data.
MyArray = ['AA1', 'AA2', 'AB1', 'AB2', 'Acc1', 'Acc2'];
MyCell = {'Name1AA1', 'Name2AA1', 'Name3Acc2', 'Name4AB2', 'Name5AD1'};

%Find common elements between MyArray and MyCell.
elem = cellfun(@(x) regexp(MyArray,x(end-2:end),'match'),MyCell,'un',0);

%Eliminate duplicates.
NewCell = unique([elem{:}]);

%Find elements in MyCell which end with NewCell elements and group them.
NewCell = cellfun(@(x) regexp([MyCell{:}],strcat('Name\d\w?',x),'match'),NewCell,'un',0);

%Join elements. 
NewCell{1} = {strjoin(NewCell{1},''',''')};

新单元格{1} = {'Name1AA1','Name2AA1'}

新单元格{2} = {'Name4AB2'}

NewCell{3} = {'Name3Acc2'}