Python - 显示Findall之前和之后的键值(正则表达式,输出)

时间:2017-05-13 09:42:05

标签: python findall

我正在尝试从Dell的RACADM输出中提取每个NIC的MAC地址,这样我的输出应该如下所示:

NIC.Slot.2-2-1  -->  24:84:09:3E:2E:1B

我已使用以下内容提取输出

output =  subprocess.check_output("sshpass -p {} ssh {}@{} racadm {}".format(args.password,args.username,args.hostname,args.command),shell=True).decode()

输出的一部分

https://pastebin.com/cz6LbcxU

每个组件详细信息显示在------行

之间

我想搜索Device Type = NIC,然后打印Instance ID和Permanent MAC。

regex = r'Device Type = NIC'
match = re.findall(regex, output, flags=re.MULTILINE|re.DOTALL)
match = re.finditer(regex, output, flags=re.S)

我使用上述两个函数来提取匹配项,但如何打印匹配正则表达式的[InstanceID: NIC.Slot.2-2-1]PermanentMACAddress

请帮助任何人?

2 个答案:

答案 0 :(得分:1)

如果我理解正确, 您可以搜索模式[InstanceID: ...]以获取实例ID, 和PermanentMACAddress = ...获取MAC地址。

以下是一种方法:

import re

match_inst = re.search(r'\[InstanceID: (?P<inst>[^]]*)', output)
match_mac = re.search(r'PermanentMACAddress = (?P<mac>.*)', output)

inst = match_inst.groupdict()['inst']
mac = match_mac.groupdict()['mac']

print('{}  -->  {}'.format(inst, mac))
# prints: NIC.Slot.2-2-1  -->  24:84:09:3E:2E:1B

如果您有多个这样的记录并希望将NIC映射到MAC,您可以获取每个记录的列表,将它们压缩在一起以创建字典:

inst = re.findall(r'\[InstanceID: (?P<inst>[^]]*)', output)
mac = re.findall(r'PermanentMACAddress = (?P<mac>.*)', output)

mapping = dict(zip(inst, mac))

答案 1 :(得分:0)

您的输出看起来像INI文件内容,您可以尝试使用configparser解析它们。

>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.read_string(output)
>>> for section in config.sections():
...     print(section)
...     print(config[section]['Device Type'])
... 
InstanceID: NIC.Slot.2-2-1
NIC
>>>