Как захватить часть строки в Groovy - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть строки текста, которые выглядят так:

2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode] scanning /mongo/db/matcher.cpp

Я хочу разобрать их, получая только значение времени 10:43:47,153

Как можно это сделать? Wildcards ...

Ответы [ 4 ]

3 голосов
/ 09 ноября 2011

Рассмотрим что-то вроде:

def s = "2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode]"
def tokens = s.split(" ")
def time = tokens[1]
println time
1 голос
/ 09 ноября 2011
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
1 голос
/ 09 ноября 2011

Если дата и время имеют фиксированную ширину, я бы просто взял значение времени следующим образом:

def s = '2011-11-08 10:43:47,153 INFO [ScanService thread] [SourceNode]'
assert s[11..22] == '10:43:47,153'
1 голос
/ 09 ноября 2011

Я бы просто разделил пробелы, или, если форматирование даты имеет постоянную ширину, используйте подстроку.

Также сработало бы регулярное выражение, но если бы в этом не было необходимости, я бы не стал беспокоиться.

...