python正则表达式没有按预期返回值

时间:2021-04-27 05:42:17

标签: 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", "333-33"]
for code in codes:
    for i in ALLOW_LIST:
        if re.search(i, code) is None:
            item.append(code)
print(item)

3 个答案:

答案 0 :(得分:1)

您可以将 class MySerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = ('timestamp', 'col1', 'col2') 函数与迭代 all 的生成器表达式一起使用,以确保在输出之前没有任何模式与当前的 ALLOW_LIST 匹配:

code

答案 1 :(得分:0)

据我所知,您只想包含与允许列表匹配的项目。

您的 if 语句将附加不匹配的项目:if re.search(i, code) is None:

您应该编辑 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)

答案 2 :(得分:0)

你可以在这里形成一个单一的正则表达式:

ALLOW_LIST = ["4[0-4]{2}-\d{2}", "111-11", "222-22"]
regex = r'^(?:' + '|'.join(ALLOW_LIST) + r')$'

items = []
codes = ["111-11", "222-22", "333-33"]
for code in codes:
    if not re.search(regex, code):
        items.append(code)

print(items)  # ['333-33']