python正则表达式未按预期返回值
我只需要打印出不匹配的项目“333-33”。当我运行以下代码时,它会打印所有项目,如“111-11”、“222-22”、“333-33” “333-33”应返回None类型 有什么建议吗?事先非常感谢python正则表达式未按预期返回值,python,Python,我只需要打印出不匹配的项目“333-33”。当我运行以下代码时,它会打印所有项目,如“111-11”、“222-22”、“333-33” “333-33”应返回None类型 有什么建议吗?事先非常感谢 ALLOW_LIST = ["(4[0-4]{2})-\d{2}", "111-11", "222-22"] item=[] codes = ["111-11", "222-22", "
ALLOW_LIST = ["(4[0-4]{2})-\d{2}", "111-11", "222-22"]
item=[]
codes = ["111-11", "222-22", "333-33"]
for code in codes:
for i in ALLOW_LIST:
if re.search(i, code) is None:
item.append(code)
print(item)
您可以将
all
函数与一个生成器表达式一起使用,该生成器表达式在输出前迭代ALLOW_LIST
,以确保没有任何模式与当前的code
匹配:
[code for code in codes if all(not re.search(i, code) for i in ALLOW_LIST)]
据我所知,您只希望包含与允许列表匹配的项 如果重新搜索(i,code)为None,则if语句将追加不匹配的项目:
:
您应该编辑if语句以包含匹配的项:
ALLOW_LIST = ["(4[0-4]{2})-\d{2}", "111-11", "222-22"]
item=[]
codes = ["111-11", "222-22", "333-33"]
for code in codes:
for i in ALLOW_LIST:
if re.search(i, code):
item.append(code)
print(item)
您可以在此处形成单个正则表达式替换:
ALLOW_LIST=[“4[0-4]{2}-\d{2}”,“111-11”,“222-22”]
regex=r'^(?:'+'|'.join(允许列表)+r'$'
项目=[]
代码=[“111-11”、“222-22”、“333-33”]
对于代码中的代码:
如果没有重新搜索(正则表达式,代码):
items.append(代码)
打印(项目)#['333-33']
按照您编写正则表达式的方式,它应该选择一个4
,然后在0
和4
之间选择两个相同的数字,然后是破折号,最后是两个数字-您的任何代码都不会被捕获。其余的只是直接匹配,不是真正的模式。然后检查是否有任何代码与ALLOW_LIST
中的任何模式不匹配,这在某一点上对所有代码都是正确的,因此难怪您会在项中找到所有代码。您可能应该重新考虑您试图解决的问题。re.search()
在与ALLOW\u LIST
中的三个正则表达式模式进行匹配时,会返回预期的None
,当这种情况发生时,您会将code
追加到项
,而您似乎想追加None
。