2017-02-09 34 views

回答

1
t = {'b6', 'b7', 'y7', 'y8', 'ju'}; 
K = 'hgtb6ju\u'; 
logidx = ~cellfun(@isempty,regexp(K,t)); %Finding if substrings are present 
matched = t(logidx) % Finding which substrings are present 
+0

我只是想用regexp变体更新我的答案:)制作了一些tic-toc,这个更快。 – DVarga

+0

谢谢!如果t = {'b10','b1','b11'},则需要进一步澄清。 K ='hgtb10ju \ u'; 。有什么办法可以将b10与b1区分开来吗? –

1

您可以使用strfind

t = {'b6', 'b7', 'y7', 'y8', 'ju'}; 
K = 'hgtb6ju\u'; 
indexes = find(cellfun(@(x) ~isempty(strfind(K, x)), t)); 
% indexes == [1, 5] - means: 'b6' and 'ju' 
isAny = ~isempty(indexes); 
+0

虽然这段代码可能回答这个问题,但提供关于为什么和/或代码如何回答这个问题的附加上下文会提高它的长期价值。 –

+0

@LuisMendo:谢谢,你完全正确!更新了答案。 – DVarga

1

比strfind解决短一点(如果你有机会到R2016b):

K = 'hgtb6ju\u'; 
t = {'b6', 'b7', 'y7', 'y8', 'ju'}; 
indices = find(cellfun(@(s) contains(K,s),t)); 

,你甚至可以直接调用contains(K,t),但它仅会返回一个标量逻辑,指示的任何的元素t是否在K中,不会告诉你哪个。这就是上面的cellfun调用所做的。

+0

应该提到'contains'是在MATLAB R2016 ** b ** –

+0

中引入的哦,我不知道。谢谢。 – Florian

相关问题