정규식을 사용하면 중첩 된 셀 어딘가에서 'hello'단어의 발생을 0으로 나타내는 논리 배열을 얻을 수 있습니다. @LuisMendo는 지적들이 중첩되지 않은 경우,이 원하지 않는 세포를 제거하는 것이 훨씬 쉬울 것 :
A =
1 1 1 0 1 1 1 0
나는 당신이 필요 거라고 생각 나머지 부분 :
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')))
는 다음과 같은 배열을 제공합니다 중첩 된 셀이 모두 동일한 크기가 아니기 때문에 루프가 반복됩니다. 아무리해도 나는 그것이 당신을 조금 도와주기를 바란다.
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}'또는'cc {4} {2}'을 (를) 제거 하시겠습니까? –
불명확하면 죄송합니다. cc {4} {2}를 제거하고 싶습니다. 즉, 벨롱이 아닌 행을 구체적으로 호출하는 것입니다. 관찰 해 주셔서 감사합니다. 게시물을 적절하게 변경했습니다. – Thoth
셀이 중첩되어 있지 않은 것이 더 쉽습니다. 그래도 셀을 벡터화하는 것은 어렵습니다 ('cellfun'은 더 많은 또는 덜 루프이므로 벡터화로 계산되지 않습니다) –