首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python中的regex搜索多行

如何使用Python中的regex搜索多行
EN

Stack Overflow用户
提问于 2021-08-24 11:41:19
回答 1查看 72关注 0票数 2

我正在寻找Python多行提取使用regex。

代码语言:javascript
复制
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

我尝试过的正则表达式:

代码语言:javascript
复制
match = re.search(r"^ip dhcp.*/s+.*/s+.*/s+.*/s+.*/s+.*override",filename,flags=re.M).group(0)

但问题是线路数目没有固定,因为在其他设备上可能会有不同,因为有些命令可能会丢失。

所以,我在这里要找的是写一个表达式,在这里我只提到文件中的起始点和结束点,以及任何中间点都可以提取。如果我提到\s+,那么我不确定中间有多少行,因为.*不能转到另一行。

我正在寻找regex或任何其他解决方案中的一些东西,在这些解决方案中,我可以提取从起点到终点的配置,就像上面提到的,而不管之间缺少哪些行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 12:45:42

您可以使用

代码语言:javascript
复制
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方法调用是不安全的。首先获得匹配,如果成功,则访问组值更安全:

代码语言:javascript
复制
match = re.search(r"(?m)^ip dhcp.*(?:\n(?!!).*)*\n.*override",filename)
if match:
    print(match.group())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68906935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档