python - 如何在 Python 中使用正则表达式搜索多行
问题描述
我正在寻找使用正则表达式的 Python 多行提取。
clock timezone EST -2 0
clock summer-time EDT recurring
!
ip dhcp snooping vlan 1-4094
no ip dhcp snooping information option
ip dhcp snooping
no ip domain-lookup
ip domain-name abc.com
ip device tracking probe auto-source override
!
crypto pki trustpoint TP-self-signed-142154678
我试过的正则表达式:
match = re.search(r"^ip dhcp.*/s+.*/s+.*/s+.*/s+.*/s+.*override",filename,flags=re.M).group(0)
但问题是行数不固定,因为在其他设备上可能会有所不同,因为某些命令可能会丢失。
所以,我在这里寻找的是写一个表达式,我只提到文件中的起点和终点,并且可以提取中间的任何内容。如果我提到\s+
,那么我不确定中间有多少行,因为.*
不能去另一行。
我正在寻找正则表达式或任何其他解决方案中的某些内容,我可以在其中提取从起点到终点的配置,如上所述,而不管其间缺少的行。
解决方案
您可以使用
re.search(r"^ip dhcp.*(?:\n(?!!).*)*\n.*override",filename,flags=re.M)
re.search(r"(?m)^ip dhcp.*(?:\n(?!!).*)*\n.*override",filename)
注意:如果override
应该作为一个完整的单词匹配,用\b
, 即括起来(?m)^ip dhcp.*(?:\n(?!!).*)*\n.*\boverride\b
。
模式匹配
(?m)
-re.M
inline 选项(使^
匹配开始于任何行)^
- 线开始ip dhcp
- 固定字符串.*
- 线路的其余部分(?:\n(?!!).*)*
- 如果不是以开头,则有零行或多行!
\n
- 换行符.*override
- 除换行符以外的任何零个或多个字符,尽可能多,然后override
.
请参阅正则表达式演示。
在 Python 方面,直接将.group()
方法调用链接在re.search
. 先获取匹配比较安全,如果成功,访问组值:
match = re.search(r"(?m)^ip dhcp.*(?:\n(?!!).*)*\n.*override",filename)
if match:
print(match.group())
推荐阅读
- visual-studio - 从其他数据库插入,避免已经插入的数据
- list - 颤振'列表
' 不是类型 'List 的子类型 ' - mongodb - mongodb 可以在 $unionWith 中使用 $push
- python - Discord.py 添加一个命令来存储数据
- spring-boot - 带有 Axon 的 Spring Boot JPA
- steam - 如何在 ubuntu 中提供安装驱动器的路径
- javascript - new RegExp() 构造函数的反面是什么?
- python - 如何计算熊猫数据框中列中特定值的平均值?
- laravel - Laravel 在到期日、3 天后、一周后从不同用户到不同客户的自动发票提醒电子邮件
- javascript - 如何在发送前为两个同名字段创建实时投注?