2016-11-25 79 views
0

希望有人能夠提供幫助。我有一個日誌從系統日誌服務器蟒,看起來像這樣已發出:Python使用正則表達式解析日誌

{'Raw': 'Nov 26 00:23:07 TEST 23856434232342 (2016-11-26T00:23:07) http-proxy[2063]: Allow 1-Trusted 0-External tcp 192.168.0.1 2.3.4.5 57405 80 msg="HTTP Request" proxy_act="HTTP-TEST" op="POST" dstname="www.google.com" arg="/" sent_bytes="351" rcvd_bytes="1400" (HTTP-proxy-TEST-00)'} 

我需要能夠提取IP地址,dstname=sent_bytes=dcvd_bytes=,如果可能的分析,以JSON。我開始嘗試使用REGEX (["'])(?:(?=(\\?))\2.)*?\1來匹配雙引號,但它不能正常工作。

任何想法如何獲得我需要的數據?或者如何解析上述json?

感謝

回答

0

假設IP,dstname sent_bytes和rcvd_bytes總是順序,使用re.findall把他們都弄到

import re 
s = r"""{'Raw': 'Nov 26 00:23:07 TEST 23856434232342 (2016-11-26T00:23:07) http-proxy[2063]: Allow 1-Trusted 0-External tcp 192.168.0.1 2.3.4.5 57405 80 msg="HTTP Request" proxy_act="HTTP-TEST" op="POST" dstname="www.google.com" arg="/" sent_bytes="351" rcvd_bytes="1400" (HTTP-proxy-TEST-00)'}""" 

match = re.findall('(?:tcp |dstname=|sent_bytes=|rcvd_bytes=)"?([^\s"]+)', s) 
# match = ['192.168.0.1', 'www.google.com', '351', '1400'] 
(ip, dstname, sent_bytes, rcvd_bytes) = match 
# use this to parse to json 
+0

感謝那些完美。 – AlanR