regex - 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
允许它通过多行运行。如果有人可以帮助我分解这里发生的事情,我将不胜感激。谢谢
解决方案
推荐阅读
- hibernate - Crieria.Root 类无法获取作为复合键属性的本地属性
- firebase - 当文档在设备外更新时,Firestore 的离线持久性如何表现?
- javascript - 制表符 - 标题排序
- oracle - 运行程序时,用户必须能够在两个参数中的一个参数中输入值,前提是两者不能保持空白
- keras - Keras 中超过 1700 个类别的多标签分类
- c++ - 未初始化的警告需要 -O2
- php - SQL 计数返回 0
- tfs - 如何在 TFS 上的另一个集合上发布我的项目的第二个版本?
- dc.js - dc.js (version 3.0.7) - 无法绘制 rangeChart ('focusChart' of undefined error)
- typescript - 如何在另一个文件中导入类属性 - Vue/Typescript