输出文件解析器问题,意外输出

2024-09-30 12:12:14 发布

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

进口re 从itertools导入islice dnlist=[] maclist=[]

以open('bulkdn.txt','r')作为行: 对于行中的行: 如果行中有'@ttml': dn=re.findall(r'\d{10}',行) dnlist.append(dn) 如果svc:1'在线: mac=re.findall(r'mac:[a-fA-F0-9]{2}[:][a-fA-AF0-9]{2}[:][a-fA-F0-9]{2}[:][a-fA-F0-9]{2}[:][a-fA-F0-9]{2}[:][a-fA F0-9]{2}',行) maclist.append(mac)

 i=0        #next
 for dn,mac in zip(dnlist,maclist):
     print('{} {}{}'.format(i,dn,mac))
     i+=1

输入文件如下

用户名 描述

上行时间型终端IP/L2TP Id/接口Id MC Stdby

你知道吗- svc:1 sap:滞后50:1776.2000mac:00:17:7c:75:99:75sid:5421 你知道吗

0d 00:02:38 oE本地不适用

你知道吗svc:1 sap:滞后50:2680.2000mac:00:17:7c:6d:d6:2bsid:4099 你知道吗

0d 00:01:30 oE本地不适用

你知道吗svc:1 sap:滞后50:2805.2000mac:00:17:7c:80:e2:fbsid:1796 你知道吗

0d 00:01:00 oE本地不适用

你知道吗svc:1 sap:滞后50:2813.2000mac:e4:6f:13:c0:13:9asid:2420 你知道吗

0d 00:00:22 oE本地不适用

你知道吗svc:1 sap:滞后50:1715.3615mac:10:62:eb:66:24:besid:6612 你知道吗

0d 00:00:05 oE本地不适用

你知道吗svc:1 sap:滞后50:62.3602mac:00:17:7c:83:51:24sid:902 你知道吗

0d 00:00:03 oE本地不适用

你知道吗svc:1 sap:滞后50:65.3605mac:00:17:7c:7c:fa:f9sid:1200 你知道吗

0d 00:00:02 oE本地不适用

你知道吗svc:1 sap:滞后50:1714.3614mac:78:32:1b:99:a0:f9sid:1178 你知道吗

0d 00:00:02 oE本地不适用

你知道吗svc:1 sap:滞后50:2585.2000mac:00:17:7c:7c:24:42sid:7710 0d 00:00:01 oE本地不适用 0200200003@ttml svc:1 sap:滞后50:1775.2000mac:00:17:7c:78:74:56sid:7151 0d 01:08:06 oE本地114.143.122.39 0200200006@ttml svc:1 sap:滞后50:2851.3739mac:00:17:7c:77:ab:26sid:2664 0d 07:26:23 oE本地49.248.206.250 01:4A:83:6A:03:4A:83:6A 0200200008@ttml svc:1 sap:滞后50:79.3609mac:80:26:89:ca:62:8bsid:4849 0d 00:28:31 oE本地49.248.169.78 82:26:89:FF:FE:CA:62:8B 0200200015@ttml svc:1 sap:滞后50:73.3603mac:6c:72:20:49:8b:6esid:7559 0d 02:28:27 oE本地49.248.177.166 6E:72:20:FF:FE:49:8B:6E 0200200016@ttml svc:1 sap:滞后50:1720.3620mac:00:17:7c:7d:41:22sid:7539 0d 02:52:09 oE本地49.248.48.145

预期输出为 0200200015mac:6c:72:20:49:8b:6e 0200200008mac:80:26:89:ca:62:8b 0200200016mac:00:17:7c:7d:41:22


Tags: reidmacoefasapdnappend
1条回答
网友
1楼 · 发布于 2024-09-30 12:12:14

我忽略了这样一个事实,即您的代码的格式与您期望的不一样,因为我认为您要问的问题是mac地址与dn不匹配

基本上你是匹配mac地址和dns,但是根据你定义的regex有14个mac和5个dns

我会用这样的多行正则表达式同时匹配dn和mac。我没有优化这个正则表达式,但是让它尽可能详细,所以它是不言自明的。基本上,虽然它匹配dn,但是各种静态文本位然后是mac形状的字符串。我们都找到了,这就是答案

import re

with open('bulkdn.txt','r') as f:
    text = f.read()
    r = re.compile(r"^([0-9]{10})\@ttml$\s*svc:1\s.*\smac:([0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2})", re.MULTILINE)
    ms = r.findall(text)

    for m in ms:
        print(m)

结果:

('0200200003', '00:17:7c:78:74:56')
('0200200006', '00:17:7c:77:ab:26')
('0200200008', '80:26:89:ca:62:8b')
('0200200015', '6c:72:20:49:8b:6e')
('0200200016', '00:17:7c:7d:41:22')

相关问题 更多 >

    热门问题