I have a cell array data (C). I use the following code to find specific character in the C;
find_character = strncmp(C, '* 2020', 7);
How can I use wilcard using strncmp to find all patterns satisfy * [0-9][0-9][0-9][0-9]? For example, if * 1988 or * 2000 exist in C, they can be also extracted.

 채택된 답변

Stephen23
Stephen23 2021년 5월 16일

2 개 추천

C = {'hello','* 2020','world','* 1923'};
X = ~cellfun(@isempty,regexp(C,'^\* \d{4}$'))
X = 1×4 logical array
0 1 0 1
D = C(X)
D = 1×2 cell array
{'* 2020'} {'* 1923'}

댓글 수: 4

Or, if * is a wild card to ignore any preceeding characters,
C = {'adfa 2000', 'xfga 1999', 't 2020', '1000', 'adfadre 12'};
X = ~cellfun(@isempty,regexp(C,'\d{4}','match','once'))
X = 1×5 logical array
1 1 1 1 0
matches = regexp(C,'\d{4}','match','once')
matches = 1×5 cell array
{'2000'} {'1999'} {'2020'} {'1000'} {0×0 char}
sermet OGUTCU
sermet OGUTCU 2021년 5월 16일
편집: sermet OGUTCU 2021년 5월 16일
My cell array includes multiple characters in one cell such as; {'* 2021 3 28 …'} ('* 2021 3 28 0 0 0.00000000'). Therefore, the above regexp cannot find the * [0-9][0-9][0-9][0-9] and it produce the empty D. How I can modify the above codes to work consistently with my cell array.
"How I can modify the above codes to work consistently with my cell array."
Remove the '$' from the end of the regular expression:
C = {'hello','* 2020 3 28','world','* 1923'};
X = ~cellfun(@isempty,regexp(C,'^\* \d{4}'))
X = 1×4 logical array
0 1 0 1
sermet OGUTCU
sermet OGUTCU 2021년 5월 16일
Thank you very much Stephen.

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

추가 답변 (1개)

Image Analyst
Image Analyst 2021년 5월 16일

0 개 추천

Use the pattern functionality. I think it's easier than regexp().
>> doc pattern

카테고리

도움말 센터File Exchange에서 Characters and Strings에 대해 자세히 알아보기

태그

질문:

2021년 5월 16일

댓글:

2021년 5월 16일

Community Treasure Hunt

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

Start Hunting!

Translated by