在匹配之前选择第一个日期,直到找到另一个匹配

2024-10-01 19:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力将一个使用grep的regex转换成Python。你知道吗

基本上,它是一个非二进制文件,所以它在日志消息中非常混乱。你知道吗

我想做的是有一个匹配,向后看为第一次发现邮票,然后向前看,直到某个匹配。你知道吗

让我举个例子。你知道吗

文本

23:31:57.968: VERBOSE: Heartbeat from NanoPC received 23:54:07.968: INFORMATION: InformationEventTriggered#123 (serverIP:Unknown, protocol:TCP) ClientID: 1 23:55:57.968: VERBOSE: Heartbeat from NanoPC received 23:56:57.968: VERBOSE: Heartbeat from NanoPC received 23:59:07.968: WARNING: WarningEventTriggered#123 (serverIP:Unknown, protocol:TCP) ClientID: 1

预期产量

捕获每次写入InformationEventTriggered或WarningEventTriggered时,将时间戳移到左侧并选择所有内容,直到clientID。 在本例中,有两个匹配项:

  1. 23:31:57.968:详细:接收到来自NanoPC的心跳23:54:07.968:信息:信息事件触发#123(服务器IP:未知, 协议:TCP)你知道吗
  2. 23:59:07.968:警告:警告事件已触发#123(服务器IP:未知, 协议:TCP)你知道吗

我尝试了什么 我正在使用re-Python:

(\d{2}:\d{2}:\d{2}.\d{3}.*)(InformationEventTriggered\#|WarningEventTriggered\#).*(?=ClientID)

第一个选择日期的组,然后将事件消息之前的所有内容(.*)发送到clientID。你知道吗

遗憾的是,它不起作用:https://regex101.com/r/dPCDtz/1

欢迎任何帮助。你知道吗


Tags: from消息内容verbose事件protocolunknowntcp
1条回答
网友
1楼 · 发布于 2024-10-01 19:16:16

你可以用

r'\b(\d{2}:\d{2}:\d{2}\.\d{3}:(?:(?!\b\d{2}:\d{2}:\d{2}\.\d{3}:).)*?)((?:Information|Warning)EventTriggered#)(.*?)(?=ClientID|\Z)'

请参见regex demo,详细信息:

  • \b-词边界
  • (\d{2}:\d{2}:\d{2}\.\d{3}:(?:(?!\b\d{2}:\d{2}:\d{2}\.\d{3}:).)*?)-第1组:
    • \d{2}:\d{2}:\d{2}\.\d{3}-2位,:,2位,:,2位,.,3位
    • :-结肠
    • (?:(?!\b\d{2}:\d{2}:\d{2}\.\d{3}:).)*?-任何字符,0+次,但尽可能少,不开始初始模式序列(见上文)
  • ((?:Information|Warning)EventTriggered#)-第2组:Information|Warning然后EventTriggered#
  • (.*?)-第3组:任何0+字符尽可能少
  • (?=ClientID|\Z)-直到第一次出现ClientID或字符串结尾。你知道吗

Python snippet

import re
text = "your string"
rx = re.compile(r'\b(\d{2}:\d{2}:\d{2}\.\d{3}:(?:(?!\b\d{2}:\d{2}:\d{2}\.\d{3}:).)*?)((?:Information|Warning)EventTriggered#)(.*?)(?=ClientID|\Z)', re.S)
for m in re.finditer(rx, text):
    print("Group 1: {}".format(m.group(1)))
    print("Group 2: {}".format(m.group(2)))
    print("Group 3: {}".format(m.group(3)))

输出:

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) 

相关问题 更多 >

    热门问题