2017-10-01 4 views
0

Ich habe die folgende Beispieldatei (AWS Load Balancer Format) Protokolldatei, die ich analysieren möchte.Nur zweite Regex-Übereinstimmung parsen (Webserver-Logs)?

http 2017-08-01T00:25:06.644602Z app/webservices/2f179337c6c8adb5 
46.229.168.65:7336 172.31.26.99:82 0.000 0.574 0.000 200 200 257 192227 "GET http://trac.navit-project.org:80/timeline?from=2011-04-16T07%3A23%3A03Z&precision=second HTTP/1.1" "Mozilla/5.0 (compatible; SemrushBot/1.2~bl; 
+http://www.semrush.com/bot.html)" - - arn:aws:elasticloadbalancing:us-west-2:712275310776:targetgroup/trac/34e2ac9af93f42de "Root=1-597fca61-4dfde4b02cd92cf61ace9825" 

Ich habe einen regulären Ausdruck, der zumindest teilweise ist, dass die Arbeit wie folgt aussieht:

match = re.search(r'\"(?P<agent>.*?)\"', line) 
print(match) 

Das Problem ist, dass der Regex nur in der obigen Logzeile den ersten Satz von Anführungszeichen entsprechen.

Gibt es eine Möglichkeit, es zu ändern, um nach der zweiten Übereinstimmung zu suchen, damit ich den Benutzeragent analysieren kann?

Antwort

1

die Regex ändern zu

"[^"]+"[^"]+"(?P<agent>[^"]*)" 

Erklärung:

"      # opening first "-set 
[^"]+     # followed by anything not equal to " 
"      # closing first " 
[^"]+     # followed by anything not equal to " 
"      # opening second "-set 
(?P<agent>[^"]*)  # named group agent 
"      # closing " 
Verwandte Themen