首页 > 解决方案 > Python正则表达式解密

问题描述

我公司的某个人创建了一个按预期工作的正则表达式字符串,但我想在未来做类似的事情并且不了解它的机制。

import re

config = """
interface Ethernet1/2
 description Management
 ip address 192.168.1.190 255.255.255.0
 ip pim sparse-dense-mode
!
interface Ethernet1/3
 description to-IntDMVPN
 ip address 10.0.0.93 255.255.255.252
 ip pim sparse-dense-mode
!
router eigrp 1
 network 172.16.0.0 0.0.0.255
 redistribute ospf 1 metric 1 1 1 1 1
!
"""

intf_obj_list = re.compile(r'^interface\s*(\S+)(.+?)(?:^\S+|\Z)', re.S|re.M).findall(config)

print(str(intf_obj_list))

我知道^interface\s*(\S+)哪个匹配路由器接口,但添加(.+?)也匹配/n每个接口配置的第一行,即使点应该匹配除换行符以外的任何字符。现在(?:^\S+|\Z)在界面下添加配置主体的匹配,我根本不明白那部分。从我能找到?:的另一种配置反向引用的方法来看,经过大量的谷歌搜索后,我仍然不清楚,我不确定^\S+|\Z它在完成什么。最后,re.S我认为允许它在遇到换行符和re.M允许它通过多行运行。如果有人可以帮助我分解这里发生的事情,我将不胜感激。谢谢

标签: regexpython-3.x

解决方案


推荐阅读