Python 使用regerx和slice进行日志处理

Python 使用regerx和slice进行日志处理,python,Python,我有一个日志合作伙伴,如下所示,我只想将它分开,它们在[]括号内,包括从一开始的时间。也尝试了下面的代码,但没有运气 def crop_string(line): try: #str0 = line.replace(']',"") #str1 = str0.replace('.000+05:30',"") str2 = line.split() #str2 = list(dict.fromkeys(str1))

我有一个日志合作伙伴,如下所示,我只想将它分开,它们在[]括号内,包括从一开始的时间。也尝试了下面的代码,但没有运气

def crop_string(line):
    try:
        #str0 = line.replace(']',"")
        #str1 = str0.replace('.000+05:30',"")
        str2 = line.split()
        #str2 = list(dict.fromkeys(str1))
        #x = len(str2)
        print(str2[0],str2[5])
        pass
    except IndexError:
        print("exception",str2)
        pass
日志

“信息:DEL:2018-11-24T14:04:49.000+05:30 bltxn03通道网关请求日志信息:[ReqOut:[RQID:1958259][STV:1RC][S:EXTGW][RQC:17007][UN:banti移动中心][CAT:RET][MSISDN:33445668][USt:Y][UNW:UW][DSMS:1RC 44xxxxxx 11111.0 VG G****[TENTID:null][UDH:313231][ST:EXTGW][SRVPRT:190][OINFO:RETAPPUW,GREYPR=RETAPPUW=RETAPPUW,MSR=RETY RETY RET=REST:[RETMSG:EXRC121TRFRESP170074/10/2018 14:04:49192108828_1548487626UW44566126此时无法处理您的请求,请稍后重试。][FixdInfNtAvail.][TT:860毫秒]”

re.findall
应该可以做到这一点。查看下面的代码片段,了解如何将其用于非贪婪正则表达式。 尽管如此,我还是建议您避免这种简单的解决方案:包含括号的字符串数据可能会导致错误的结果

# -*- coding: utf-8 -*-

from __future__ import print_function
import re


def crop_string(line):
    log_time = re.search(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}", line)
    if log_time is None:
        raise Exception("The line doesn't include a timestamp")
    log_brackets_list = re.findall("\[(.*?)\]", line)
    return log_time.group(0), log_brackets_list


if __name__ == '__main__':

    time, brackets_list = crop_string("""INFO:DEL:2018-11-24T14:04:49.000+05:30 bltxn03 ChannelGatewayRequestLog INFO   :: [ReqOut:][RQID:1958259][STV:1RC][S:EXTGW][RQC:17007][UN:banti mobile centre ][CAT:RET][MSISDN:334455668][USt:Y][UNW:UW][DSMS:1RC 44xxxxxx 11111.0 VG ****][TEMPTID:null][UDH:313231][ST:EXTGW][SRVPRT:190][OINFO:RETAPPUW,MsgReq=true,FT=R ResTyp=RESPONSE][RETMSG:<?xml version="1.0"?><!DOCTYPE COMMAND PUBLIC "-//Ocam//DTD XML Command 1.0//EN" "xml/command.dtd"><COMMAND><TYPE>EXRC121TRFRESP</TYPE><TXNSTATUS>17007</TXNSTATUS><DATE>4/10/2018 14:04:49</DATE><EXTREFNUM>192108828_1548487626</EXTREFNUM><TXNID>UW445566126</TXNID><MESSAGE>Your request cannot be processed at this time, please try again later.</MESSAGE></COMMAND>][FixdInfNtAvail.][TT:860 ms]""")
    print(time, brackets_list)
#-*-编码:utf-8-*-
来自未来导入打印功能
进口稀土
def crop_字符串(行):
log_time=re.search(r“\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}”,第行)
如果日志时间为无:
引发异常(“该行不包含时间戳”)
log\u方括号\u list=re.findall(\[(.*?\]),第行)
返回日志时间组(0),日志列表
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
时间,方括号-列表=裁剪字符串(““”信息:DEL:2018-11-24T14:04:49.000+05:30 bltxn03通道网关请求日志信息::[ReqOut:[RQID:1958259][STV:1RC][S:EXTGW][RQC:17007][UN UN:banti移动中心][CAT:RET][MSISDN:33445668][USt:Y][UNW:UW][DSMS:1RC 44xxxxxx 1110 G****][TENTID:null][UDH:311 ST:EXTGW][SRVPRT:190][OINFO:RETAPPUW,MsgReq=true,FT=R ResTyp=RESPONSE][RETMSG:EXRC121TRFRESP170074/10/2018 14:04:49192108828\u 1548487626uw445566126此时无法处理您的请求,请稍后重试。][FixdInfNtAvail.][TT:860 ms]“”)
打印(时间、括号和列表)
什么是“不走运”意思?如果这不起作用,会发生什么情况?是否有错误?(请不要在评论中回答。用于将所有缺少的信息添加到问题中。)
# -*- coding: utf-8 -*-

from __future__ import print_function
import re


def crop_string(line):
    log_time = re.search(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}", line)
    if log_time is None:
        raise Exception("The line doesn't include a timestamp")
    log_brackets_list = re.findall("\[(.*?)\]", line)
    return log_time.group(0), log_brackets_list


if __name__ == '__main__':

    time, brackets_list = crop_string("""INFO:DEL:2018-11-24T14:04:49.000+05:30 bltxn03 ChannelGatewayRequestLog INFO   :: [ReqOut:][RQID:1958259][STV:1RC][S:EXTGW][RQC:17007][UN:banti mobile centre ][CAT:RET][MSISDN:334455668][USt:Y][UNW:UW][DSMS:1RC 44xxxxxx 11111.0 VG ****][TEMPTID:null][UDH:313231][ST:EXTGW][SRVPRT:190][OINFO:RETAPPUW,MsgReq=true,FT=R ResTyp=RESPONSE][RETMSG:<?xml version="1.0"?><!DOCTYPE COMMAND PUBLIC "-//Ocam//DTD XML Command 1.0//EN" "xml/command.dtd"><COMMAND><TYPE>EXRC121TRFRESP</TYPE><TXNSTATUS>17007</TXNSTATUS><DATE>4/10/2018 14:04:49</DATE><EXTREFNUM>192108828_1548487626</EXTREFNUM><TXNID>UW445566126</TXNID><MESSAGE>Your request cannot be processed at this time, please try again later.</MESSAGE></COMMAND>][FixdInfNtAvail.][TT:860 ms]""")
    print(time, brackets_list)