find function using wildcards

29 次查看(过去 30 天)
fileID = fopen(full_file_name);
header = textscan(fileID, '%[^,\n]');
fclose(fileID);
end_of_header_line=find(contains(header{1,1},'* '));
Here, I find all line numbers of header includes any * with two spaces or more. I need to modify the last part of the above codes to find all line numbers includes * with two spaces and following four digit numbers such as;
* 2021
For example header includes:
/* GeoForschungsZentrum Potsdam
/*
/*
* 2021 3 28 0 0 0.00000000
The line numbers (end_of_header_line) produced from above codes includes all 4 lines. What I need to find only the last line.

采纳的回答

Rik
Rik 2021-9-17
You can use the patterns introduced in R2020b:
str={'/* GeoForschungsZentrum Potsdam '
'/* '
'/* '
'* 2021 3 28 0 0 0.00000000 '};
pat="*"+whitespacePattern(2,inf)+digitsPattern(1);
contains(str,pat)
ans = 4×1 logical array
0 0 0 1
Alternatively you can use regular expressions, which are not much harder to use.
  2 个评论
sermet OGUTCU
sermet OGUTCU 2021-9-17
Dear @Rik, my matlab version is R2019a. If it is possible, could you show me the another way that will be worked in this version?
Rik
Rik 2021-9-17
When you posted your question you had the opportunity to enter your release. Please do so next time. As you can see it is sometimes relevant.
str={'/* GeoForschungsZentrum Potsdam '
'/* '
'/* '
'* 2021 3 28 0 0 0.00000000 '};
pat=['\*',... % a literal *
'\s\s','\s*',...% two whitespace characters, followed by 0 or more
'\d']; % any digit
pos=regexp(str,pat) %regexp returns the position of a match
pos = 4×1 cell array
{0×0 double} {0×0 double} {0×0 double} {[ 1]}
%The legacy syntax of cellfun is the only case where it is faster than a
%loop. However, it doesn't work properly with all data types.
logical(cellfun('prodofsize',pos))
ans = 4×1 logical array
0 0 0 1

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by