Python 连接多个正则表达式的输出

Python 连接多个正则表达式的输出,python,regex,join,Python,Regex,Join,我有一个txt格式的防火墙日志文件,例如: src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp 我已经构建了正则表达式来提取我需要的信息(src、dst、service),但是我需要能够连接正则表达式的输出,并在日志

我有一个txt格式的防火墙日志文件,例如:

src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp
我已经构建了正则表达式来提取我需要的信息(src、dst、service),但是我需要能够连接正则表达式的输出,并在日志文件中的每一行的每个service=object和“TCP”之前使用一个选项卡将输出写入文件,因此新文件的输出如下所示:

10.10.10.1    20.20.20.1    TCP 443
30.30.30.1    40.40.40.1    TCP 8080
此外,我需要能够区分输入文件的service=部分中的“
TCP
”和“
UDP
”,以便写入输出文件的内容是正确的,例如:如果输入文件的第三行是:

src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp
我被困在这里,需要帮助

import re
import sys

with open("SFD-IPs.txt", "r") as file:
    text = file.read()

sources = re.findall(r'src=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text)
dest = re.findall(r'dst=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text)
service = re.findall(r'service=(\d+)', text)


with open("output.txt", "w") as TufinReq:
    TufinReq.write(sIP)

f=open("output.txt", "r")
del_list = ["src=", "dst=", "service="]
list = []
for line in f:
    for word in del_list:
        if word in line:
            line = line.replace(word, "")
    list.append(line)
f.close()
f=open("output.txt", "w+")
for line in list:
    f.write(line)
f.close()

首先,您需要拆分
dest
的每个项目,以检索所需的数据,如下所示:

sources = [item.split('=')[1] for item in sources]
dest = [item.split('=')[1] for item in dest]
现在,您可以按如下方式使用内置功能:

with open('output.txt', 'w') as f:
    for item in zip(sources, dest, service):
        f.write('{}\t{}\tTCP\t{}\n'.format(*item))
如果还要添加协议,可以执行以下操作:

proto = re.findall(r'proto=(\w+)', text)
proto = [item.upper() for item in proto]

with open('output.txt', 'w') as f:
    for item in zip(sources, dest, proto, service):
        f.write('{}\t{}\t{}\t{}\n'.format(*item))
输出:

output.txt
文件的内容用于:

text = '''src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp
src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp'''
是这样的:

10.10.10.1  20.20.20.1  TCP 443
30.30.30.1  40.40.40.1  TCP 8080
50.50.50.1  60.60.60.1  UDP 161

您可以使用一个简单得多的模式,通过单个正则表达式搜索和替换来实现这一点

正则表达式:

src=([\d\.]+).*dst=([\d\.]+).*service=(\d+).*proto=(.*)
替换字符串:

$1    $2    $4 $3