У меня есть строки текста, которые выглядят так:
2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode] scanning /mongo/db/matcher.cpp
Я хочу разобрать их, получая только значение времени 10:43:47,153
10:43:47,153
Как можно это сделать? Wildcards ...
Рассмотрим что-то вроде:
def s = "2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode]" def tokens = s.split(" ") def time = tokens[1] println time
log = ''' 2011-11-08 08:13:16,121 INFO [ScanService thread] [SourceNode] scanning /mongo/db/matcher.cpp 2011-11-08 09:32:42,102 INFO [ScanService thread] [SourceNode] scanning /mongo/db/matcher.cpp 2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode] scanning /mongo/db/matcher.cpp ''' matcher = (log =~ /\d{2}:\d{2}:\d{2},\d{3}/) matcher.count.times { println matcher[it] }
дает вам:
08:13:16,121 09:32:42,102 10:43:47,153
Если дата и время имеют фиксированную ширину, я бы просто взял значение времени следующим образом:
def s = '2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode]' assert s[11..22] == '10:43:47,153'
Я бы просто разделил пробелы, или, если форматирование даты имеет постоянную ширину, используйте подстроку.
Также сработало бы регулярное выражение, но если бы в этом не было необходимости, я бы не стал беспокоиться.