【问题标题】:Python parse log using regexPython 使用正则表达式解析日志
【发布时间】:2016-11-25 23:43:42
【问题描述】:

希望有人能提供帮助。我有一个日志从 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?

谢谢

【问题讨论】:

    标签: python json regex syslog


    【解决方案1】:

    假设 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2015-09-06
      相关资源
      最近更新 更多