Python正则表达式查找子字符串

2024-04-30 05:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

示例文本

port0 interface GigabitEthernet0/4/0

port1 interface TenGigabitEthernet0/1/0

login delay 2

bfd-template single-hop BDI

ip ftp source-interface Loopback0

ip tftp source-interface Loopback0

interface Loopback0

interface Loopback100

interface Loopback999

description *** Loopback interface for management ***

interface TenGigabitEthernet0/0/0

mtu 9216

carrier-delay msec 0

interface TenGigabitEthernet0/1/0

mtu 9216

carrier-delay msec 0

interface GigabitEthernet0/4/0

mtu 9216

interface GigabitEthernet0/4/1

我的正则表达式是

[T][e]((?:.|\n)*?[e][c]\s\d+)

我正在核实pythex.org网站你知道吗

它与下面的匹配-

TenGigabitEthernet0/1/0

mtu 9216

carrier-delay msec 0 

这正是我想要的。但它也符合-

TenGigabitEthernet0/1/0

login delay 2

bfd-template single-hop BDI

ip ftp source-interface Loopback0

ip tftp source-interface Loopback0

interface Loopback0

interface Loopback100

interface Loopback999

description *** Loopback interface for management ***

interface TenGigabitEthernet0/0/0

mtu 9216

carrier-delay msec 0

我不想要。我正在寻找一个multiline regex,它只完全匹配我字符串中的所有tengig-mtu-carrier-delay part(s)。你知道吗

我写的是-

buffer_=open(file,"rb")
sb=buffer_.read().replace('\r\r\n','')
inf = re.compile(r'[T][e]((?:.|\n)*?[e][c]\s\d+)')
intf = inf.findall(sb)
print intf
buffer_.close()

而且它非常适用于在连续行中有tengig-mtu-carrier-delay的文件,但不是那么完美。是否在别处也发现了tengig?你知道吗


Tags: ipsourcebufferlogintemplateinterfacedelaybfd
1条回答
网友
1楼 · 发布于 2024-04-30 05:52:59

我想这个正则表达式就是你想要的

(tengig.*?(?:\n+)?\bmtu\b.*?(?:\n+)?\bcarrier-delay\b[^\n]+)

Regex Demo

正则表达式分解

( #Capturing group
 tengig #Match tengig literally
 .*? #Lazy matching to meet next next requirement
 (?:\n+)? #Match next \n (OPTIONAL)
 \bmtu\b #Match mtu literally
 .*? #Lazy matching to meet next requirement
 (?:\n+)? #Match next \n (OPTIONAL)
 \bcarrier-delay\b #Match carrier-delay literally
 [^\n]+ #Match anything till a new line 
) #End capturing group

Python代码

p = re.compile(r'(tengig.*?(?:\n+)?\bmtu\b.*?(?:\n+)?\bcarrier-delay\b[^\n]+)', re.MULTILINE | re.IGNORECASE)
test_str = "port0 interface GigabitEthernet0/4/0\n\nport1 interface TenGigabitEthernet0/1/0\n\nlogin delay 2\n\nbfd-template single-hop BDI\n\nip ftp source-interface Loopback0\n\nip tftp source-interface Loopback0\n\ninterface Loopback0\n\ninterface Loopback100\n\ninterface Loopback999\n\ndescription * Loopback interface for management *\n\ninterface TenGigabitEthernet0/0/0\n\nmtu 9216\n\ncarrier-delay msec 0\n\ninterface TenGigabitEthernet0/1/0\n\nmtu 9216\n\ncarrier-delay msec 0\n\ninterface GigabitEthernet0/4/0\n\nmtu 9216\n\ninterface GigabitEthernet0/4/1\n"

Ideone Demo

相关问题 更多 >