我正试图从具有这种格式的远程Linux机器上捕获消息:
.*transmit message cmd: 0x1234, len: 20,
.*data: 00000000: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
.*data: 00000010: 00 11 22 33
.*receive message cmd: 0x1234, len: 0,
.*transmit message cmd: 0x1234, len: 0,
我创建了一个正则表达式,可以捕获我想要的(一条消息,无论是发送还是接收消息),原理上是这样的:
r'^.*(receive|transit).*message.*cmd(?P<cmd> [\da-fA-F]+,.*len(?P<len> \d+,(?:\n.*data:.*:.*)*'
带有re.M标志。
找到包含“接收”或“发送”和“消息”的任何行,并可能在其后跟随N条“数据”行(假设味精的len不同于0),这就是为什么最后一组会发生> =0。对文件中的数据运行(因此进行脱机分析)时,此正则表达式将执行其工作。但是问题是当将此正则表达式应用于来自Linux机器的实时传入条带时,众所周知,telnetlib.Telnet.expect()结果以贪婪的量词结尾的regex是不确定的:
如果正则表达式以贪婪匹配(例如。*)结尾,或者 一个以上的表达式可以匹配相同的输入,结果是 不确定的,可能取决于I / O时序。
https://docs.python.org/2/library/telnetlib.html
如何重写正则表达式,从而避免telnetlib的不足?我考虑过不搜索“数据”,而是搜索不匹配“接收”或“发送”的任何内容,因为这是新消息的开始。
答案 0 :(得分:0)