Python - 显式匹配字符串中的字符串

Python - matching a string within a string explicitly

我正在尝试匹配特定的路由器接口。但是,我发现以下内容令人困惑,当搜索特定接口编号时,它在第一个条件下匹配,而我认为它应该在第二个条件下匹配:

string = ["TenGigE0/0/0/0.12", "TenGigE0/0/0/1.46", "TenGigE0/0/0/15.55"]

for item in string:
    if 'TenGigE0/0/0/0' in item or 'TenGigE0/0/0/1' in item:
        print("Yes")
    elif 'TenGigE0/0/0/15' in item:
        print("cool")

输出为:

Yes
Yes
Yes

我该如何解决这个问题?

更改 if 语句:

string = ["TenGigE0/0/0/0.12", "TenGigE0/0/0/1.46", "TenGigE0/0/0/15.55"]

for item in string:
    if 'TenGigE0/0/0/15' in item:
        print("cool")
    elif ('TenGigE0/0/0/0' in item) or ('TenGigE0/0/0/1' in item):
        print("Yes")

会给你:

Yes
Yes
cool

因为 TenGigE0/0/0/15 也包含 TenGigE0/0/0/1,如果您在检查 TenGigE0/0/0/15 之前检查 TenGigE0/0/0/1,第一个 if 语句的结果为 True

让我们想象一下:

  • 'TenGigE0/0/0/0' in 'TenGigE0/0/0/0.12' 为真,因为 'TenGigE0/0/0/0''TenGigE0/0/0/0.12':

    的子字符串
    TenGigE0/0/0/0.12
    TenGigE0/0/0/0
    
  • 'TenGigE0/0/0/1' in 'TenGigE0/0/0/1.46' 为真,因为 'TenGigE0/0/0/1''TenGigE0/0/0/1.46':

    的子串
    TenGigE0/0/0/1.46
    TenGigE0/0/0/1
    
  • 'TenGigE0/0/0/15.55'也一样:

    TenGigE0/0/0/15.55
    TenGigE0/0/0/1
    

if语句在第一个条件之后执行代码True,所以即使'TenGigE0/0/0/15' in 'TenGigE0/0/0/15.55'为True,'TenGigE0/0/0/1' in 'TenGigE0/0/0/15.55'第一个,所以这就是被执行的。

正如其他答案中已经提到的,'/1''/15' 的子字符串。

另一种解决方案是将 regex 与单词绑定 \b'0''1':[=17= 的组一起使用]

import re

string = ["TenGigE0/0/0/0.12", "TenGigE0/0/0/1.46", "TenGigE0/0/0/15.55"]
for item in string:
    if re.match(r'TenGigE0/0/0/(0|1)\b', item):
        print("Yes")
    elif re.match(r'TenGigE0/0/0/15\b', item):
        print("cool")

输出:

Yes
Yes
cool