从字符串中提取特定数据

时间:2019-03-05 02:46:57

标签: python

我在下面有这个字符串,我需要从该字符串中获取各个接口的特定配置,例如,我需要能够进行解析以获取它。

interface Loopback0
  ip address 1.1.1.1/32
  no shutdown
  isis enable 2222
  isis passive

或能够获得

interface Management0
  no sflow enable
  ip address 1.1.1.2/31
  no shutdown
  isis enable 2222
  isis passive

接口下的行数可以变化。

字符串是:

[hostname router\r\n!\r\ninterface Loopback0\r\n  ip address 1.1.1.1/32\r\n  no shutdown\r\n isis enable 2222\r\n  isis passive\r\n!\r\nvrf definition MGMT\r\n  rd 200:200\r\n!\r\n!\r\nvrf definition VRF_DDOS\r\n  rd 2222:100\r\n  description VRF_DDOS\r\n!\r\n!\r\n interface ethernet1/1\r\n  no sflow enable\r\n ip address 1.1.1.2/31\r\n  no shutdown\r\n isis enable 2222\r\n  isis passive\r\n!\r\nvrf definition MGMT\r\n  rd 200:200\r\n!\r\n!\r\nvrf definition VRF_DDOS\r\n  rd 2222:100\r\n  description VRF_DDOS\r\n!\r\n!\r\n ]

1 个答案:

答案 0 :(得分:0)

结帐https://pythex.org/and了解如何使用RegEx

如果在示例文本中输入字符串并使用(\ d。\ d。\ d。\ d / \ d \ d)作为模式,它将收集每个IP地址。

import re

ip_address = re.findall(r'(\d.\d.\d.\d/\d\d)', string)

print(ip_address)
>>> 1.1.1.1/32, 1.1.1.2/31

或者,如果输出始终相同,则可以在'\'处分割字符串,并获取每个项目的索引。

示例:

feedback = "[hostname router\r\n!\r\ninterface Loopback0\r\n ip address 1.1.1.1/32\r\n no shutdown\r\n isis " \
              "enable 2222\r\n isis passive\r\n!\r\nvrf definition MGMT\r\n rd 200:200\r\n!\r\n!\r\nvrf definition" \
              " VRF_DDOS\r\n rd 2222:100\r\n description VRF_DDOS\r\n!\r\n!\r\n interface ethernet1/1\r\n no sflow " \
              "enable\r\n ip address 1.1.1.2/31\r\n no shutdown\r\n isis enable 2222\r\n isis passive\r\n!\r\nvrf " \
              "definition MGMT\r\n rd 200:200\r\n!\r\n!\r\nvrf definition VRF_DDOS\r\n rd 2222:100\r\n description " \
              "VRF_DDOS\r\n!\r\n!\r\n ]".replace('\r\n','').split(' ')

print(feedback[2:6])

output >>> ['Loopback0', 'ip', 'address', '1.1.1.1/32']
相关问题