使用正则表达式

时间:2016-11-25 23:43:42

标签: python json regex syslog

希望有人可以提供帮助。我有一个从syslog服务器发送到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?

由于

1 个答案:

答案 0 :(得分: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