繁体   English   中英

Matlab:如何优化代码以在 sting 中找到后缀

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM