Используя регулярные выражения, вы можете получить логический массив, в котором нули представляют собой вхождения гнезда «hello» где-то во вложенной ячейке. Как @LuisMendo отметил, что это будет гораздо легче удалить ненужные клетки, если они не были вложены:
clc
clear
cc{1} = {'str_row1col1', 'str_row1col2' };
cc{2} = {'str_row2col1', 'bighello', 'str_row1col3' };
cc{3} = {'str_row3col1'};
cc{4} = {'str_row3col1', 'helloWorld'};
A = (cellfun(@isempty,regexp([cc{:}],'(\w*hello|hello\w*)','match')))
дает следующий массив:
A =
1 1 1 0 1 1 1 0
Для остальных я думаю, что вам потребуется поскольку вложенные ячейки не имеют одинакового размера. Во всяком случае, я надеюсь, что это поможет вам немного.
EDIT Вот что вы можете сделать, используя цикл for. Чтобы идентифицировать интересующие слова (земля и вода, как в вашем комментарии ниже), просто добавьте их в аргумент в вызове regexp. Этот персонаж: | используется для создания своего рода списка, чтобы Matlab проверял все выражения в скобках.
Для получения дополнительной информации о регулярных выражениях обратитесь к странице this. Существует также возможность поиска регулярных выражений с чувствительностью к регистру.
Пример кода, в котором я добавил строки, содержащие землю и воду:
cc{1} = {'str_row1col1', 'earth!superman' 'str_row1col2' 'DummyString'};
cc{2} = {'str_row2col1', 'bighello', 'str_row1col3' };
cc{3} = {'str_row3col1' 'str_row3col3' 'water_batman'};
cc{4} = {'str_row3col1' 'str_row4col2' 'helloWorld'};
cc{5} = {'str_row5_LegoMan' 'str_row5col2' 'AnotherDummyString' 'Useless String' 'BonjourWorld'};
% With a for loop, for example:
FinalCell = cell(size(cc,2),1);
for k = 1:size(cc,2)
DummyCell = cc{k}; % Use dummy cell for easier indexing
% This is where you tell Matlab what words/expressions you are looking for
A = cellfun(@isempty,regexp(cc{k},'(\w*hello|hello\w*|earth|water)','match'));
DummyCell(~A) = []; % Remove the cells containing the strings/words of interest
FinalCell{k} = DummyCell;
end
Тогда вы хорошо идти. Надеюсь, это поможет!
Вы хотите удалить 'cc {4}' or 'cc {4} {2}'? –
Извините, если это неясно, мне интересно удалить cc {4} {2}, т. Е. Специальный вызов, а не строку, которая звонит. Спасибо за ваше наблюдение, я сделал соответствующие изменения на этом посту. – Thoth
Было бы легче, если бы ячейки не были вложенными. Тем не менее, векторизация сложна с ячейками ('cellfun' является более или менее циклом, поэтому он не считается векторизации) –