2017-06-01 3 views
-3

Ich lese eine Protokolldatei und ein Muster in der Datei übereinstimmen; und wenn es übereinstimmt, mache die Regex auf der Linie.Ruby Regex für Datum und Uhrzeit

f = File.open(file,"r") 
f.seek(0,IO::SEEK_END) 

while true do 
    select([f]) 
    line = f.gets 
    if line =~ pattern 
    a = line.sub(/ .*$/, "") 

Ich habe die obige Methode versucht und es schlägt aus irgendeinem Grund fehl.

So habe ich

"2017053007: 00: 02: INFO: Verarbeitung Schaufel: East3"

in die Leitung kommt nach dem Muster übereinstimmen. Sie müssen einfach "2017053007: 00: 02" mit dem Regex ausfiltern.

Dank

+1

Was versuchen Sie eigentlich hier zu erreichen? Erhalten Sie einfach eine Liste aller Zeitstempel, wie '2017053007: 00: 02', in der Datei? Es sieht so aus, als ob Sie die Implementierung zu sehr kompliziert haben. –

+0

Ich kopiere einfach eingefügt und es funktioniert '" 2017053007: 00: 02: INFO: Verarbeitung Bucket: East3 ".sub (/. * $ /," ")' –

+0

Sie können nicht ** tun ** Regex ". Allerdings können Sie "** eine Regex verwenden". – sawa

Antwort

0

Vielleicht könnten Sie versuchen: ([0-9] + [0-9] {2}: [0-9] {2})

1
input = "2017053007:00:02 : INFO : Processing bucket : East3" 
input[/(?<=\A\d{10}:\d{2}:\d{2}\s:\s).*/] 
#⇒ "INFO : Processing bucket : East3" 

input[/\S+/] 
#⇒ "2017053007:00:02" 
+0

Danke für die Eingabe –

0

ohne REGEX:

> a = "2017053007:00:02 : INFO : Processing bucket : East3" 
> a.split.first 
#=> "2017053007:00:02"