2 回答

TA贡献1877条经验 获得超1个赞
它不会被忽略,只是您的条件始终为真,因此您不会过滤掉任何内容。
re.search如果找到某对象,则返回匹配对象,否则返回一个匹配对象None。无论哪种方式,都不会成为的元素dirs,因为dirs它只是一个字符串列表。因此,您的所有测试始终都是正确的。
不必检查搜索不在其中dirs,而只需检查它是否不正确。(匹配对象始终是真实的,并且None始终是虚假的。)
另外,在解决此问题之后,我非常确定您希望将所有测试失败的值保留在其中,但是您使用or而不是and,这意味着您将在所有测试失败的值保留在其中。
所以:
dirs[:] = [dir for dir in dirs
if not re.search(r'\bEXP\b', dir)
and not re.search(r'\b3.2\b', dir)
and not re.search(r'\w+(?:-\w+)+', dir)]
或者,如果更容易理解(相反),而不是将所有值都保留在所有测试失败的地方,而是将所有值保留在所有测试都不成立的地方:
dirs[:] = [dir for dir in dirs if not (
re.search(r'\bEXP\b', dir) or
re.search(r'\b3.2\b', dir) or
re.search(r'\w+(?:-\w+)+', dir))]
添加回答
举报