Python 使用正则表达式解析日志
Python parse log using regex
希望有人能提供帮助。我有一个日志从系统日志服务器发送到 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 (["'])(?:(?=(\?)).)*?
来匹配双引号,但它无法正常工作。
关于如何获取所需数据的任何想法?或者如何将上面的解析为 json?
谢谢
假设 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
希望有人能提供帮助。我有一个日志从系统日志服务器发送到 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 (["'])(?:(?=(\?)).)*?
来匹配双引号,但它无法正常工作。
关于如何获取所需数据的任何想法?或者如何将上面的解析为 json?
谢谢
假设 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