import re string = """ .1.3.6.1.4.1.14823.1.1.27 { TYPE = Switch VENDOR = Aruba MODEL = ArubaS3500-48T CERTIFICATION = CERTIFIED CONT = Aruba-Switch HEALTH = ARUBA-Controller VLAN = Dot1q INSTRUMENTATION: Card-Fault = ArubaController:DeviceID CPU/Memory = ArubaController:DeviceID Environment = ArubaSysExt:DeviceID Interface-Fault = MIB2 Interface-Performance = MIB2 Port-Fault = MIB2 Port-Performance = MIB2 } .1.3.6.1.4.1.14823.1.1.28 { TYPE = Switch VENDOR = Aruba MODEL = ArubaS3500-48T CERTIFICATION = CERTIFIED CONT = Aruba-Switch HEALTH = ARUBA-Controller VLAN = Dot1q INSTRUMENTATION: Card-Fault = ArubaController:DeviceID CPU/Memory = ArubaController:DeviceID Environment = ArubaSysExt:DeviceID Interface-Fault = MIB2 Interface-Performance = MIB2 Port-Fault = MIB2 Port-Performance = MIB2 } """ rx_outer = re.compile(r'^\s*(?P<key>\.[\d.]+)\s*{(?P<values>[^{}]+)}', re.MULTILINE) rx_inner = re.compile(r'(?P<key>\b[A-Z][-/\w]+\b)\s*=\s*(?P<value>.+)') result = {item.group('key'): {match.group('key'): match.group('value') for match in rx_inner.finditer(item.group('values'))} for item in rx_outer.finditer(string)} print(result)
Standard input is empty
{'.1.3.6.1.4.1.14823.1.1.27': {'CERTIFICATION': 'CERTIFIED', 'Interface-Fault': 'MIB2', 'Environment': 'ArubaSysExt:DeviceID', 'Port-Performance': 'MIB2 ', 'VLAN': 'Dot1q INSTRUMENTATION:', 'VENDOR': 'Aruba', 'Interface-Performance': 'MIB2', 'TYPE': 'Switch', 'CPU/Memory': 'ArubaController:DeviceID', 'Card-Fault': 'ArubaController:DeviceID', 'MODEL': 'ArubaS3500-48T', 'HEALTH': 'ARUBA-Controller', 'Port-Fault': 'MIB2', 'CONT': 'Aruba-Switch'}, '.1.3.6.1.4.1.14823.1.1.28': {'CERTIFICATION': 'CERTIFIED', 'Interface-Fault': 'MIB2', 'Environment': 'ArubaSysExt:DeviceID', 'Port-Performance': 'MIB2 ', 'VLAN': 'Dot1q INSTRUMENTATION:', 'VENDOR': 'Aruba', 'Interface-Performance': 'MIB2', 'TYPE': 'Switch', 'CPU/Memory': 'ArubaController:DeviceID', 'Card-Fault': 'ArubaController:DeviceID', 'MODEL': 'ArubaS3500-48T', 'HEALTH': 'ARUBA-Controller', 'Port-Fault': 'MIB2', 'CONT': 'Aruba-Switch'}}