Regular Expression to timestamp

3 次查看(过去 30 天)
I have a log file that gives me a timestamp with two formats:
when time is between [0h,1h[:
11:32.456 - MM:SS.zzz
when time is between [1h,1000h[:
22:45:45.234 - HH:MM:SS.zzz
So i created this regular expression:
(?<hour>\d+)?:?(?<minute>\d+):(?<second>\d+)\.(?<fraction>\d+)
The problem is that if the time is less than one hour ( [0h,1h[ - 11:32.456) the regular expression gives me this:
Hour:1
Minute: 1
seconds: 32
fraction: 456
I need the next result:
Hour: 0
Minute: 11
seconds: 32
fraction: 456
If the time is greater than 1 hour all goes fine.
How can i solve this problem?
Thanks.

采纳的回答

Star Strider
Star Strider 2019-7-24
I would just use the hour, minute and second functions.
Note that second will give you the fractions as well.
If you want to separate the fractions:
t1 = datetime('now','Format','dd-MMM-yyyy HH:mm:ss.SSS');
s = second(t1)
fraction = rem(s,1)
  4 个评论

请先登录,再进行评论。

更多回答(1 个)

Stephen23
Stephen23 2019-7-25
编辑:Stephen23 2019-7-25
>> rgx = '(?<H>\d*)(?(1):)(?<M>\d+):(?<S>\d+)\.(?<F>\d+)';
>> regexp('11:32.456',rgx,'names')
ans =
H: ''
M: '11'
S: '32'
F: '456'
>> regexp('22:45:45.234',rgx,'names')
ans =
H: '22'
M: '45'
S: '45'
F: '234'

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by