l = ['abc_123','abc_456','ade_098','def_765','deg_432']
patterns=['a.*3','def.*']
我试图找到一个正则表达式,它可以同时检查patterns
中的两种模式是否都存在于列表l
中。
在上面的示例中,这是正确的,因为“abc_123
”和“def_765
”匹配patterns
中的每个模式。我想到
[s for s in l if ((re.match(patterns[0], s)) or (re.match(patterns[1], s)))]
但是如果我有一个如下的列表,我该怎么办
l = ['abc_123','abc_456','ade_093','deh_765','deg_432']
在本例中,上面的代码将给出两个结果,但仅匹配模式“a.*3
”
理想情况下,如果两种模式都匹配,我希望返回True,否则返回False
我可以做类似的事情
pat0 = [s for s in l if re.match(patterns[0], s)]
pat1 = [s for s in l if re.match(patterns[1], s)]
并检查pat0
和pat1
是否都不是空的,但这似乎有点浪费,特别是如果我的列表很长并且有几种模式的话
您可以尝试:
这是非常基本的布尔逻辑。您正在使用
or
。如果其中一个为true,则返回true。您需要and
,它仅在两个条件都为true或者在您的案例中两个条件都匹配时才返回true您的最终代码是
[s for s in l if ((re.match(patterns[0], s)) and (re.match(patterns[1], s))]
相关问题 更多 >
编程相关推荐