Matlab中使用regexp从元胞数组提取字符串遇错求助
解决MATLAB regexp匹配数量不匹配的问题
错误原因
regexp函数要求输入的字符串元胞数组和模式元胞数组长度必须一致:要么是单个模式匹配所有字符串,要么是字符串和模式一一对应匹配。你的场景是4个字符串对应2个模式,不符合函数参数要求,因此报错。
解决方案
方法1:合并正则模式
把两个模式用|(或逻辑)合并成单个表达式,一次性匹配所有符合条件的字符串:
c = {'The quick'; 'brown fox'; 'jumps over'; 'the lazydog'}; r_combined = '.*quick|.*over'; % 合并两个模式 % 执行匹配,获取每个字符串的匹配结果 matches = regexp(c, r_combined, 'match'); % 筛选出有匹配结果的原字符串 extracted = c(~cellfun(@isempty, matches));
执行后extracted即为目标结果:{'The quick'; 'jumps over'}
方法2:分别匹配后合并结果
逐个检查每个模式的匹配情况,再合并符合条件的字符串:
c = {'The quick'; 'brown fox'; 'jumps over'; 'the lazydog'}; r = {'.*quick', '.*over'}; % 检查每个字符串是否匹配第一个模式 match_quick = ~cellfun(@isempty, regexp(c, r{1}, 'match')); % 检查每个字符串是否匹配第二个模式 match_over = ~cellfun(@isempty, regexp(c, r{2}, 'match')); % 合并两种匹配结果,提取目标字符串 extracted = c(match_quick | match_over);
方法3:循环遍历模式(适合多场景扩展)
如果后续需要添加更多模式,用循环逐个处理更灵活:
c = {'The quick'; 'brown fox'; 'jumps over'; 'the lazydog'}; r = {'.*quick', '.*over'}; extracted = {}; for pattern = r % 匹配当前模式 matches = regexp(c, pattern{1}, 'match'); % 筛选匹配成功的字符串 idx = ~cellfun(@isempty, matches); extracted = [extracted; c(idx)]; end % 可选:去重(防止字符串同时匹配多个模式导致重复) extracted = unique(extracted);
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

