2017-02-09 24 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

Я только что собирался обновить свой ответ с помощью варианта регулярного выражения :) Сделал несколько тик-токов, этот намного быстрее. – 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, не сообщая вам, какой. Это то, что называется сотовый.

+0

Следует отметить, что 'contains' вводится в MATLAB R2016 ** b ** –

+0

О, я этого не знал. Благодарю. – Florian