简化了我在下面工作的代码,以说明我所面临的问题。我是python的新手,所以这可能会在我的代码中得到体现,所以请容忍我。
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)其结果如下:
['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”,以及为什么这样的行会重复两次:
'create vlan "PL-BB-VoIP"'我所奋斗的是解决这个问题的解决方案,我需要有一个完全匹配的比较,而不是更多和更少,这应该希望停止重复,并想知道是否有人可以帮助。
事先非常感谢
发布于 2022-02-22 18:44:11
如果这是您正在使用的确切数据,则根本不需要regex。
查找由空格或双引号包围的vlan名称:
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:发布于 2022-02-22 18:46:11
不如用消极的眼光去尝试吧。我们匹配给定的vlan_name,并检查下面的部分是否与我们想要的模式混淆。
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
发布于 2022-02-22 18:52:00
如果您不是在寻找字符而是一个完整的单词,请使用拆分函数。它将字符串转换为单词列表。
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]输出:
matching_lines=
['create vlan "PL-BB"',
'configure vlan PL-BB tag 135',
'create vlan "PL-BB-VoIP"',
'create vlan "PL-BB-VoIP"']https://stackoverflow.com/questions/71226242
复制相似问题