使用regex从多行字符串输出中提取路由器mac地址

时间:2019-02-12 02:13:57

标签: python json api mac-address

我想从python中的设备发现中提取mac地址。每个设备发现将返回设备的mac地址,并提取每个设备的mac地址。每个设备的mac地址都是唯一的,我只需要提取mac地址部分并删除其他部分即可。

我用下面的python代码发送路由器命令

 show chassis mac-addresses | match "Private base"

router命令将在路由器终端中返回如下所示的输出

 Private base address    00:1c:95:b9:e7:f0

{master}

只有几行字符串需要删除,而只是提取mac地址。

这是我用来在python中发送命令的代码

output_mac = connection.send_command('show chassis mac-addresses | match 
"Private base"')

print("router_mac1: " + re.sub('\{|master|\:|0|\}|\\n','',output_mac))

结果输出如下

router_mac:   Private base address    1db5d9e7f

在输出中有很多空间,缺少'0'和':'。 我只想获取mac地址,例如,这里仅00:1c:95​​:b9:e7:f0 我可以知道如何正确提取每个设备的mac地址。感谢您的帮助和友善的支持。谢谢

我希望每个设备的输出如下

router_mac1:00:1c:95:b9:e7:f0
router_mac2:00:3b:25:c6:f3:d0

根据示例,我尝试了

print("router_mac: " + re.findall(r'.([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F] 
{2})',output_mac)) 

但是我得到了错误返回

print("router_mac: " + re.findall(r'([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F] 
{2})',output_mac))
TypeError: must be str, not list

嗨,

我尝试对Mac地址使用正则表达式,如下所示;

re1='.*?' 
re2='((?:[0-9A-F][0-9A-F]:){5}(?:[0-9A-F][0-9A-F]))(?![:0-9A-F])' 
rg=re.compile(re1+re2,re.IGNORECASE|re.DOTALL)
m = rg.search(output3)
if m:
  mac1 = m.group(1)
  print("router_mac1: " + mac1 + "\n")

它返回mac地址,但还在下面创建新的空行

hostname: XC1-rtr-bkg
router_mac1: 00:1c:95:b9:e7:f0

model_type: T320

应该是

hostname: XC1-rtr-bkg
router_mac1: 00:1c:95:b9:e7:f0
model_type: XXX

如何删除上面多余的行?谢谢

我删除了\ n

0 个答案:

没有答案