Python 在匹配之前选择第一个日期,直到找到另一个匹配
我正在努力将一个使用grep的正则表达式转换成Python 基本上,它是一个非二进制文件,所以它在日志消息中非常混乱 我想做的是做一个匹配,在第一次找到邮票时向后看,然后向前看,直到找到匹配 让我举个例子 正文 23:31:57.968:VERBOSE:NanoPC接收到心跳23:54:07.968:INFORMATION:InformationEventTriggered123服务器IP:Unknown,协议:TCP客户端ID:1 23:55:57.968:VERBOSE:NanoPC接收到心跳23:56:57.968:VERBOSE:NanoPC接收到心跳23:59:07.968:WARNING:WarningEventTriggered123服务器IP:Unknown,协议:TCP客户端ID:1 预期产量 捕获每次写入InformationEventTriggered或WarningEventTriggered时,将时间戳移到左侧并选择所有内容,直到clientID。 在本例中,有两个匹配项: 23:31:57.968:详细:从NanoPC接收到心跳23:54:07.968:信息:InformationEventTriggered123服务器IP:未知,协议:TCP 23:59:07.968:警告:WarningEventTriggered123服务器IP:未知,协议:TCP 我试过什么 我正在使用re-Python:Python 在匹配之前选择第一个日期,直到找到另一个匹配,python,regex,Python,Regex,我正在努力将一个使用grep的正则表达式转换成Python 基本上,它是一个非二进制文件,所以它在日志消息中非常混乱 我想做的是做一个匹配,在第一次找到邮票时向后看,然后向前看,直到找到匹配 让我举个例子 正文 23:31:57.968:VERBOSE:NanoPC接收到心跳23:54:07.968:INFORMATION:InformationEventTriggered123服务器IP:Unknown,协议:TCP客户端ID:1 23:55:57.968:VERBOSE:NanoPC接收到心
(\d{2}:\d{2}:\d{2}.\d{3}.*)(InformationEventTriggered\#|WarningEventTriggered\#).*(?=ClientID)
第一组选择日期,然后选择所有内容。*直到事件消息发送到clientID
可悲的是,它不起作用:
欢迎任何帮助。您可以使用
r'\b(\d{2}:\d{2}:\d{2}\.\d{3}:(?:(?!\b\d{2}:\d{2}:\d{2}\.\d{3}:).)*?)((?:Information|Warning)EventTriggered#)(.*?)(?=ClientID|\Z)'
详情请参阅:
\b字边界
\d{2}:\d{2}:\d{2}\.\d{3}:?:\b\d{2}:\d{2}:\d{2}\.\d{3}:.*-第一组:
\d{2}:\d{2}:\d{2}\.\d{3}-2位,2位,2位,3位
:-冒号
?:?!\b\d{2}:\d{2}:\d{2}\.\d{3}:.*-任何字符,0+次,但尽可能少,不开始一系列初始模式,见上文
?:信息|警告事件触发-第2组:信息或|警告,然后事件触发
.*? - 第3组:任何0+字符尽可能少
?=ClientID |\Z-直到第一次出现ClientID或字符串结尾。
:
输出:
Group 1: 23:54:07.968: INFORMATION:
Group 2: InformationEventTriggered#
Group 3: 123 (serverIP:Unknown, protocol:TCP)
Group 1: 23:59:07.968: WARNING:
Group 2: WarningEventTriggered#
Group 3: 123 (serverIP:Unknown, protocol:TCP)
这非常有效,我只需要在第一个小时之前稍微调整一下\d{2}有一个随机数和字母,因为日志没有解析好。请看这里的第二个条目,有没有办法处理它?@AlejandroA您可以删除\b然后。看见
Group 1: 23:54:07.968: INFORMATION:
Group 2: InformationEventTriggered#
Group 3: 123 (serverIP:Unknown, protocol:TCP)
Group 1: 23:59:07.968: WARNING:
Group 2: WarningEventTriggered#
Group 3: 123 (serverIP:Unknown, protocol:TCP)