Python解析匹配的行,使用特定的formu

2024-09-30 10:33:40 发布

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

我有一些如下所示的实时数据包存储在一个文件log.log,我正在以tail -f的形式读取log.log文件并对其进行分析。但是所有的行都是随机的,没有固定的值,比如随机ip,data::blocks中的随机值,每个data::都是一个列值。e、 g在a log.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...

现在,我如何解析这条线呢?其中,它可以忽略任何内容,只在匹配时解析:

^{pr2}$

运行:

$ tail -f /var/tmp/log.log | python -u /var/tmp/myparse.py

在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"

Tags: relogdataifbytesvarmatchconnect
1条回答
网友
1楼 · 发布于 2024-09-30 10:33:40

尝试使用:

match = re.search(r'connect data::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::end$', line)

行锚^的开头是阻止匹配的第一件事。在

而且*在regex中不是通配符,它是一个表示0次或更多次的量词。您可以使用[^:]+来表示“除冒号之外的任何字符”。在

regex101 demo

相关问题 更多 >

    热门问题