我目前正在使用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中没有代码名称,则没有新单元格。
欢迎任何帮助,感谢您的宝贵时间
答案 0 :(得分:1)
您可以使用正则表达式的组合来获得所需的输出。不建议您使用动态命名变量的方法,因为这种方法会导致难以调试的代码。请改用索引。
您可以阅读Matlab论坛上的this内容丰富的帖子,以了解原因。
%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},''',''')};
NewCell {1} = {'Name1AA1','Name2AA1'}
NewCell {2} = {'Name4AB2'}
NewCell {3} = {'Name3Acc2'}