首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python与准确的单词匹配,不多,也不差。

Python与准确的单词匹配,不多,也不差。
EN

Stack Overflow用户
提问于 2022-02-22 18:05:06
回答 3查看 49关注 0票数 0

简化了我在下面工作的代码,以说明我所面临的问题。我是python的新手,所以这可能会在我的代码中得到体现,所以请容忍我。

代码语言:javascript
运行
复制
import re

vlan_names = ['PL-BB', 'PL-BB-VoIP']
vlan_lines = ['create vlan "PL-BB"', 'configure vlan PL-BB tag 135', 'create vlan "PL-BB-VoIP"', 'create vlan "PL-BB-VoIP"']

vlan_config_lines = []

for vlan_line in vlan_lines:
    for vlan_name in vlan_names:
        if re.search(r'\b' + vlan_name + r'\b', vlan_line):
            vlan_config_lines.append(vlan_line.strip("\n"))

print (vlan_config_lines)

其结果如下:

代码语言:javascript
运行
复制
['create vlan "PL-BB"', 'configure vlan PL-BB tag 135', 'create vlan "PL-BB-VoIP"', 'create vlan "PL-BB-VoIP"', 'create vlan "PL-BB-VoIP"', 'create vlan "PL-BB-VoIP"']

问题是,在迭代过程中,regex搜索将匹配“PL-BB-VOIP”一词中的“PL-BB”,以及为什么这样的行会重复两次:

代码语言:javascript
运行
复制
'create vlan "PL-BB-VoIP"'

我所奋斗的是解决这个问题的解决方案,我需要有一个完全匹配的比较,而不是更多和更少,这应该希望停止重复,并想知道是否有人可以帮助。

事先非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-22 18:44:11

如果这是您正在使用的确切数据,则根本不需要regex。

查找由空格或双引号包围的vlan名称:

代码语言:javascript
运行
复制
for vlan_line in vlan_lines:
    for vlan_name in vlan_names:
        if f' {vlan_name} ' in vlan_line or f'"{vlan_name}"' in vlan_line:
票数 1
EN

Stack Overflow用户

发布于 2022-02-22 18:46:11

不如用消极的眼光去尝试吧。我们匹配给定的vlan_name,并检查下面的部分是否与我们想要的模式混淆。

代码语言:javascript
运行
复制
import re

vlan_names = ['PL-BB', 'PL-BB-VoIP']
vlan_lines = ['create vlan "PL-BB"', 'configure vlan PL-BB tag 135', 'create vlan "PL-BB-VoIP"', 'create vlan "PL-BB-VoIP"']

vlan_config_lines = []

for vlan_line in vlan_lines:
    for vlan_name in vlan_names:
        if re.search(r'\b' + vlan_name + r'(?![-])\b', vlan_line):
            vlan_config_lines.append(vlan_line.strip("\n"))
            print(f"Found '{vlan_name}' in '{vlan_line.strip()}'")

print(vlan_config_lines)

在下面的示例中解释:https://regex101.com/r/GHNF1e/1

票数 1
EN

Stack Overflow用户

发布于 2022-02-22 18:52:00

如果您不是在寻找字符而是一个完整的单词,请使用拆分函数。它将字符串转换为单词列表。

代码语言:javascript
运行
复制
vlan_names = ['PL-BB', 'PL-BB-VoIP']
vlan_names2 = vlan_names + [f'"{name}"' for name in vlan_names]
vlan_lines = ['create vlan "PL-BB"', 'configure vlan PL-BB tag 135', 'create vlan "PL-BB-VoIP"', 'create vlan "PL-BB-VoIP"']           
matching_lines = [line for line in vlan_lines for word in line.split() if word in vlan_names2]

输出:

代码语言:javascript
运行
复制
matching_lines= 
['create vlan "PL-BB"',
 'configure vlan PL-BB tag 135',
 'create vlan "PL-BB-VoIP"',
 'create vlan "PL-BB-VoIP"']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71226242

复制
相关文章

相似问题

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