Python—在匹配行时使用特定公式解析该行
我有一些实时数据包存储在文件Python—在匹配行时使用特定公式解析该行,python,regex,parsing,Python,Regex,Parsing,我有一些实时数据包存储在文件log.log中,如下所示,我正在将log.log文件作为tail-f读取并解析它。但是所有的行都是随机的,没有固定的值,比如随机ip,在data::blocks中的随机值,每个data::都是一列值。e、 g在alog.log中 Ohter type of lines... [TCP]: incomeing data: 91 bytes, data=connect data::10.109.0.200data::10.109.0.86data::wandata::p
log.log
中,如下所示,我正在将log.log
文件作为tail-f
读取并解析它。但是所有的行都是随机的,没有固定的值,比如随机ip,在data::blocks
中的随机值,每个data::都是一列值。e、 g在alog.log中
Ohter type of lines...
[TCP]: incomeing data: 91 bytes, data=connect data::10.109.0.200data::10.109.0.86data::wandata::p4data::1400data::800data::end
[TCP]: incomeing data: 91 bytes, data=connect data::10.109.0.201data::10.109.8.86data::landata::p4data::1400data::700data::end
[TCP]: incomeing data: 91 bytes, data=connect data::10.109.0.200data::10.109.58.86data::3gdata::p4data::400data::800data::end
something.. else...
现在,我如何解析该行?其中,它可以忽略任何内容,并且仅在匹配时进行分析:
connect data::ANYdata::ANYdata::ANYdata::ANYdata::ANYdata::ANYdata::end
运行:
myparse.py:
import sys, time, os, subprocess
import re
def p(command):
subprocess.Popen(command, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
while True:
line = sys.stdin.readline()
if line:
if "command:start" in line:
print "OK - working"
p("/var/tmp/single_thread_process.sh")
if "connect data::" in line:
..
else:
# ^(?:\+|00)(\d+)$ Parse the 0032, 32, +32
#match = re.search(r'^(?:\+|00)(\d+)$', line)
#if match:
#print "OK"
### NOT working ###
match = re.search(r'^connect data::*data::*data::*data::*data::*data::*data::end$', line)
if match:
print "OK"
尝试使用:
match = re.search(r'connect data::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::end$', line)
线锚的开头是阻止匹配的第一件事
另外,*
在正则表达式中不是通配符,它是一个表示0次或多次的量词。您可以使用[^:::::+
表示“除冒号以外的任何字符”
+1。可以通过量化子模式来简化正则表达式:r'connect data::([^::+:){6}end$'
@FMc-Yup。我最初只是想对OP当前的正则表达式进行尽可能少的更改,然后忘记了重复^^;谢谢你的提醒!
match = re.search(r'connect data::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::end$', line)