필터 지우기
필터 지우기

How to filter set of strings with set of patterns?

조회 수: 31 (최근 30일)
Robert Roos
Robert Roos 2020년 9월 11일
댓글: Ameer Hamza 2020년 9월 11일
I have a list of strings:
names = {'Robert', 'Bob', 'Charles', 'James', 'Jamie', 'Marie', 'Jamesbob'}
That I want to filter with a set of regular expression patterns:
patterns = {'.*ob', 'jam.*'}
How can I a list of the names which match with at least one of the patterns? (Without getting duplicates and while keeping the original order)
So would expect an output like:
{'Robert', 'Bob', 'James', 'Jamie', 'Jamesbob'}
I can find matches with a single pattern like:
regex_matches = regexpi(names, pattern{1}, 'match')
Can have multiple patterns without using a loop?
And here `regex_matches` is a cellarray of cellarrays. How would I turn this into a single level list?
(This questions sounds failry general but I couldn't find a previous question. Apologies if there is one.)

채택된 답변

Ameer Hamza
Ameer Hamza 2020년 9월 11일
편집: Ameer Hamza 2020년 9월 11일
Try this
names = {'Robert', 'Bob', 'Charles', 'James', 'Jamie', 'Marie', 'Jamesbob'};
patterns = {'.*ob', 'jam.*'};
regex_matches = cell(numel(patterns), numel(names));
for i=1:numel(patterns)
regex_matches(i, :) = regexpi(names, patterns{i}, 'match');
end
idx = any(~cellfun(@isempty, regex_matches));
matched_names = names(idx);
Result
>> matched_names
matched_names =
1×5 cell array
{'Robert'} {'Bob'} {'James'} {'Jamie'} {'Jamesbob'}
  댓글 수: 2
Robert Roos
Robert Roos 2020년 9월 11일
That is gorgeous, thank you!
Does this cover the unique part? If so could, could you briefly elaborate?
Ameer Hamza
Ameer Hamza 2020년 9월 11일
It first matches patterns{1} with the elements in name names, and then matches patterns{2} and then take logical or of both results. This approach keeps the order of names in the matched_names same as names.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by