[英]Matlab: how to optimize a code to find postfix in a sting
我有一个单元格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{:}];
遍历可能的“前缀”是微不足道的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.