我正在寻找Python多行提取使用regex。
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+,那么我不确定中间有多少行,因为.*不能转到另一行。
我正在寻找regex或任何其他解决方案中的一些东西,在这些解决方案中,我可以提取从起点到终点的配置,就像上面提到的,而不管之间缺少哪些行。
发布于 2021-08-24 12:45:42
您可以使用
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内联选项(使^匹配任何行的开始)^线启动ip dhcp -一个固定的字符串.* -行的其余部分(?:\n(?!!).*)* -如果不以!开头,则为零行或多行\n -一个新行字符.*override -除行中断字符以外的任何零或多个字符,尽可能多,然后是override。见regex演示。
在Python方面,在.group()之后直接链接re.search方法调用是不安全的。首先获得匹配,如果成功,则访问组值更安全:
match = re.search(r"(?m)^ip dhcp.*(?:\n(?!!).*)*\n.*override",filename)
if match:
print(match.group())https://stackoverflow.com/questions/68906935
复制相似问题