2016-11-25 5 views
0

Надеюсь, кто-то может помочь. У меня есть журнал был отправлен из системного журнала сервера на Python, который выглядит следующим образом:Журнал синтаксического анализа 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

 Смежные вопросы

  • Нет связанных вопросов^_^