在 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'}
我目前正在使用 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'}