|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
如题,新手一枚,最近捣鼓从文本中进行多行匹配“switchport trunk encapsulation dot1q\n switchport mode trunk\n”,然后提取上下关联行内容写入新的文本中,折腾了两个礼拜没成功,请大神帮忙看下怎么实现。
一、匹配内容"interface .* switchport trunk encapsulation dot1q\n switchport mode trunk\n!",字符串开始为“interface xx”,字符串结束为"!"
txt=
"""
!
interface GigabitEthernet1/2
description TO_MDCN_YJL_1F_C1_SW2-H3C-S7606_xg0/0/2
switchport
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 115
switchport mode trunk
channel-protocol lacp
channel-group 10 mode active
!
!
interface Port-channel1
description To-MM-SW-C6509-02-Channel-1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
storm-control broadcast level 1.00
!
!
interface Port-channel10
description 1JiLou-9306-1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
!
!
interface GigabitEthernet1/1
description TO_MDCN_YJL_1F_D1_SW1-H3C-S7606_XG0/0/1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
!
interface GigabitEthernet1/2
description TO_MDCN_YJL_1F_C1_SW2-H3C-S7606_xg0/0/2
switchport
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 115
switchport mode trunk
channel-protocol lacp
channel-group 10 mode active
!
interface GigabitEthernet1/3
description TO_MDCN_YJL_1F_C1_SW2-H3C-S7606_xg0/0/3
switchport
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 115
switchport mode trunk
channel-protocol lacp
channel-group 10 mode active
!
interface GigabitEthernet1/4
description this port is bad
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
speed nonegotiate
storm-control broadcast level 1.00
!
interface GigabitEthernet1/5
description no-use
no ip address
shutdown
!
interface GigabitEthernet1/6
description To_4F-B3-WLAN_Controller1_G0/1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
storm-control broadcast level 10.00
!
interface GigabitEthernet1/7
description To_4F-B1-MDCN-R2-NE40_G5/0/0
switchport
switchport access vlan 501
switchport mode access
!
"""
二、预期输出内容:
interface Port-channel1
description To-MM-SW-C6509-02-Channel-1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
storm-control broadcast level 1.00
interface Port-channel10
description 1JiLou-9306-1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
interface GigabitEthernet1/1
description TO_MDCN_YJL_1F_D1_SW1-H3C-S7606_XG0/0/1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
interface GigabitEthernet1/4
description this port is bad
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
speed nonegotiate
storm-control broadcast level 1.00
interface GigabitEthernet1/6
description To_4F-B3-WLAN_Controller1_G0/1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
storm-control broadcast level 10.00
三、因为内容跨行并且要整个文本都要查找,使用re.match和re.search没搞定,后来使用re.findall
脚本1
import re
print("".join(re.findall(r'(^interface .* switchport trunk encapsulation dot1q\n switchport mode trunk\n.*!$)',txt)))
输出:
脚本结束
Process finished with exit code 0
或
脚本2
import re
print("".join(re.findall(r' switchport trunk encapsulation dot1q\n switchport mode trunk\n',txt)))
输出:
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk encapsulation dot1q
switchport mode trunk
脚本结束
Process finished with exit code 0
结果:脚本1 无法match任何数据,脚本2输出数据不完整,只有一部分,另外最终我想输出结果到新文本中,最好是以函数调用方式实现。
任选其一
- result = re.findall(r'^inter.*|^switch.*|^storm.*', txt, re.M)
- result = re.findall(r'(?:^inter|^switch|^storm).*', txt, re.M)
复制代码
|
|