我有106x1
一串弦TrajCompact
。在每个字符串中,我想查找所有组合的前缀,(0,1,2,3,4)
并且仅考虑此前缀之后的后缀。我的前缀是:
00,01,02,03,04,10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44
我尝试使用代码来做到这一点
for k=1:size(TrajCompact,1)
matches(k) = regexp(TrajCompact(k), '\(?00.*', 'match', 'once');
end
该代码运行,但我必须编写25次:每个前缀一次。我想找到一个紧凑的表达式,所以我以这种方式修改代码:
[digits{1:2}] = ndgrid(0:4);
for k=1:106
matches(k) = regexp(TrajCompact(k), sprintf('?%d%d.*', digits{1}(k), digits{2}(k)), 'match', 'once');
end
但这不能满足我的要求,这里有什么缺点?
您应该解决以下问题regexp
:
matches{k} = regexp(TrajCompact{k}, '\(?[0-4][0-4].*', 'match', 'once');
以后编辑
基于本文评论中的较长讨论,OPs问题的解决方案应与使用该函数的思路相同:
get_matches = @(x,c)cellfun(@(s)regexp(s,sprintf('\\(%s\\)[0-4]+',x),'match'),c,'UniformOutput',false);
例如,对于字符串单元格:
str_cell = {'(23)2' '02(13)(23)1(23)21(23)20(23)1(23)21(23)1(23)(13)(23)1(32)31(32)12321(23)21321(23)132(31)(32)31(32)12321(23)21(23)21(23)20(23)2' '210432342432132342(34)323134(32)43413243424321234321432412343212(34)1341234' '24321(34)(32)3432134(32)3431(34)323432(34)(32)3432(34)3'};
匹配的字符串可以通过以下方式检索:
a23 = get_matches('23', str_cell);
a23 = [a23{:}];
遍历可能的“前缀”是微不足道的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句