2016-08-26 1 views
1

Ich könnte eine Regex für die Übereinstimmung einer Log-Zeile schreiben. Aber meine Datei enthält einige Protokollzeilen, die sich von den anderen Protokollzeilen dadurch unterscheiden, dass es nur ein paar zusätzliche Felder gibt oder in einigen wenigen die Schlüsselwertpaare durcheinander liegen.Regex für Log-Zeilen, die leicht voneinander abweichen können - in Funke

Eg. eine Protokollzeile: case_id=1 event_id=35654423 date=30-12-2010 time=11.02 activity=registerrequest name=Pete costs=50 rerr="-"

ein anderes: case_id=1 event_id=35654424 date=31-12-2010 time=11.07 costs=400 rerr="-" activity=examinethoroughly name=Sue rloc="-"

Mein log pattern = "^([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)\s([^\s]+)" Dies ist mein Code für in Funken Gruppierung:

match = re.search(LOG_PATTERN,line) 
Case_ID = match.group(1) 
Event_ID = match.group(2) 
Date = match.group(3) 
Time = match.group(4) 
Activity = match.group(5) 
Resource = match.group(6) 
Costs = match.group(7) 
Rerr = match.group(8) 

Dieser Code würde nur den ersten Log-Zeile entsprechen. Wie schreibe ich eine Regex, so dass ich sie in Spark gruppieren kann, ohne eine der Protokollzeilen zu ignorieren?

+0

Eine Anmerkung: Einige Werte sind in Anführungszeichen und Sie verwenden '[^ \ s] +' - das wird Zitate in den Übereinstimmungen enthalten - ist es OK? –

+0

Ja, das ist in Ordnung. – kaks

Antwort

1

Ich schlage vor, Sie eine einfache regex verwenden Schlüssel und Werte greifen:

rx = "(\\S+)=(\\S+)" 

oder

rx = "(\\w+)=(\\S+)" 

ein regex demo See.

Dann ein Wörterbuch mit re.findall erstellen:

d = dict([(x,y) for x,y in re.findall(rx,line)]) 

Dann haben Sie Zugriff auf jeden Schlüsselwert haben.

+0

Ich habe den obigen Code versucht, aber ich bekomme einen Fehler für den Collect-Befehl, der sagt, dass der Eingabepfad falsch ist, obwohl ich den richtigen angegeben habe. Ich habe meinen Code zu der Frage hinzugefügt. – kaks

+0

Also, der Fehler betrifft überhaupt nicht die Regex, es sagt nur, dass es die Datei nicht finden kann. –

+0

Sie haben Recht. Danke trotzdem. Wird eine andere Frage öffnen. – kaks

Verwandte Themen