Matlab 测试varargin是否存在字符串模式
我有一个函数,它接受Matlab 测试varargin是否存在字符串模式,matlab,validation,input,Matlab,Validation,Input,我有一个函数,它接受varargin,具有不同类型的灵活数量的输入。我想检查变量是否存在某个字符串/子字符串,例如 regexpi(varargin,'test'); 这适用于varargin={'a','b'},但如果存在其他数据类型,则会失败。我如何轻松(最少的代码行)得到一个逻辑矩阵来测试test的存在性?我想到了一个令人烦恼的问题: varargin={'a',1,'test',{2}; logi=num2单元(零(大小(varargin));%逻辑向量“是否存在字符串”; logi(
varargin
,具有不同类型的灵活数量的输入。我想检查变量是否存在某个字符串/子字符串,例如
regexpi(varargin,'test');
这适用于varargin={'a','b'}
,但如果存在其他数据类型,则会失败。我如何轻松(最少的代码行)得到一个逻辑矩阵来测试test
的存在性?我想到了一个令人烦恼的问题:
varargin={'a',1,'test',{2};
logi=num2单元(零(大小(varargin));%逻辑向量“是否存在字符串”;
logi(cellfun(@isstr,varargin))=regexp(varargin(cellfun(@isstr,varargin)),“测试”);
%输出一个单元格数组,其中数字>0表示“已找到字符串”
您可以使用isequal
进行快速修复
bTest = cellfun( @(x) isequal( x, 'test' ), varargin );
更详细的解决方案可能是使用inputParser
和许多MATLAB函数中存在的标准“名称-值对”语法
function myFunc( varargin )
% 'option' is the name of this optional parameter
% varargin = {'option', 'test'};
p = inputParser();
p.addOptional( 'option', '' ); % Optional parameter, default to empty
p.parse( varargin{:} );
p.Results.option % = 'test' for the example varargin
我会使用这个,它与您的代码类似,但更简单:
varargin = {'abcd', 'efg', [1 2 3 4], {10; 20}};
pattern = 'bc';
result = cellfun(@(x) ischar(x) && ~isempty(regexpi(x, pattern)), varargin);
请注意,在匿名函数中使用
&&
如何防止将测试应用于非字符参数。Edit:mmmmmmhh!我的印象是,匿名函数不允许使用&&
运算符,这会带来大量新功能possibilities@user2305193很高兴你喜欢:-)如果第一个条件(ischar(x))是真的,有没有办法报告布尔值以外的值?我不知道你的意思。那有什么价值呢?匹配的起始位置?或者仅仅是基于ischar
条件的附加布尔值?基本上我想要的是匿名函数中的if语句,if~isempty(x),return(x)isempty(x)| | x
实际上不起作用