我有多个物品的清单。需要创建一个循环,以从列表中找到一个项目并将其打印出来。 如果未找到项目,则仅在找不到后才打印出来。
for x in range(len(regs)):
rex = regs[x]
if re.match(rex,hostname):
print (dev[x],'Regex matched')
break
else:
print('wrong format')
当前,它多次打印出未找到的内容。 当它与正则表达式匹配时,它将在末尾打印出来。 我只希望If Else打印一次“错误格式”。
当前打印出错误的格式错误的格式错误的格式错误的格式 错误格式错误格式错误格式“ DeviceX正则表达式匹配”
答案 0 :(得分:1)
将else
与for
一起使用。
一旦找到一项,您就会脱离for循环,下面的代码将可以正常工作:
for x in range(len(regs)):
rex = regs[x]
if re.match(rex,hostname):
print (dev[x],'Regex matched')
break
else:
# Does not execute only when a break statement
# is executed inside the for loop.
print('wrong format')
答案 1 :(得分:0)
它被打印多次,因为在很多时候当前值都不匹配。解决此问题的一种简单方法是使用标志,如下所示:
value_found = False
for x in range(len(regs)):
rex = regs[x]
if re.match(rex,hostname):
print (dev[x],'Regex matched')
value_found = True
break
if not value_found:
print('wrong_format')
答案 2 :(得分:0)
您可以按如下方式维护标志变量。
matched = False
for x in range(len(regs)):
rex = regs[x]
if re.match(rex, hostname):
print(dev[x], "Regex matched!")
matched = True
break
if not matched:
print("Wrong format")
答案 3 :(得分:0)
这应该可以解决您的问题。
flag = 0
for x in range(len(regs)):
rex = regs[x]
if re.match(rex, hostname):
print(dev[x], 'Regex matched')
flag = 1
break
if flag == 0:
print('wrong format')
答案 4 :(得分:0)
我认为您可以使用以下综合列表将其缩短:
if len([r for r in regs if re.match(r, hostname)]) == 1:
print(dev[regs.index([r for r in regs if re.match(r, hostname)][0])], 'Regex matched')
else:
print('not found')