我有一个函数,它使用不同类型的灵活数量的输入。我想检查变量是否存在某个字符串/子串。

regexpi(varargin,'test');

这对varargin有效,但如果有其他数据类型,则会失败如何容易地(最少的代码集)得到一个逻辑矩阵来测试varargin={'a','b'}的存在吗?我想到了一件令人烦恼的事:
varargin={'a',1,'test',{2}};
logi=num2cell(zeros(size(varargin))); %logical vector 'is string present or not';
logi(cellfun(@isstr,varargin))=regexp(varargin(cellfun(@isstr,varargin)),'test');
%outputs a cell array where numbers > 0 represent 'string found'

最佳答案

我将使用这个,它与您的代码类似,但更简单:

varargin = {'abcd', 'efg', [1 2 3 4], {10; 20}};
pattern = 'bc';
result = cellfun(@(x) ischar(x) && ~isempty(regexpi(x, pattern)), varargin);

注意在匿名函数中使用&&如何防止将测试应用于非char参数。

09-28 04:25