Formating strings using named tokens
31 次查看(过去 30 天)
显示 更早的评论
With regexp a struct can be obtained with named tokens where all information about the token names is in the expression (https://nl.mathworks.com/help/matlab/ref/regexp.html#btqhkwj-7)
Example:
str = '01/11/2000 20-02-2020 03/30/2000 16-04-2020';
expression = ['(?<month>\d+)/(?<day>\d+)/(?<year>\d+)|'...
'(?<day>\d+)-(?<month>\d+)-(?<year>\d+)'];
tokenNames = regexp(str,expression,'names');
for k = 1:length(tokenNames)
disp(tokenNames(k))
end
I am now looking for the inverse: specify this expression, and fill in the tokens at the correct location.(like formatting in python https://docs.python.org/3/tutorial/inputoutput.html)
I want to do something like:
tokenName.month = '02'
tokenName.day = '20'
tokenName.year = '2020'
sprintf('(?<month>\d+)/(?<day>\d+)/(?<year>\d+)', tokenName)
Results:
2020/20/02
My usecase is that I define pattern in one location in my scripts to parse filenames, and that in a later moment I want to generate comparable filenames. It is very convinient to have to specify that only once, and not twice with slightly different notation.
0 个评论
回答(2 个)
Star Strider
2026-1-22,12:24
I am not exactly certain what you want.
Using an anonymous function is one option --
DMY = @(d,m,y) sprintf('%02d-%02d-%4d',d,m,y);
day = 19;
month = 1;
year = 1807;
str = DMY(day,month,year)
.
Stephen23
2026-1-22,13:55
Given:
tokenName.month = '02';
tokenName.day = '20';
tokenName.year = '2020';
expr = '(?<month>\d+)/(?<day>\d+)/(?<year>\d+)';
You could do:
out = regexprep(expr, '\(\?<(\w+)>[^)]*\)', '${tokenName.($1)}')
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!