检查列表是否有一个或多个与正则表达式匹配的字符串

时间:2015-12-29 22:44:43

标签: python regex list

如果需要说

if <this list has a string in it that matches this rexeg>:
    do_stuff()

found这个强大的构造从列表中提取匹配的字符串:

[m.group(1) for l in my_list for m in [my_regex.search(l)] if m]

...但这很难读懂和矫枉过正。我不想要列表,我只是想知道这样的列表是否包含任何内容。

是否有更简单的阅读方式来获得答案?

1 个答案:

答案 0 :(得分:7)

您只需使用any即可。演示:

>>> lst = ['hello', '123', 'SO']
>>> any(re.search('\d', s) for s in lst)
True
>>> any(re.search('\d{4}', s) for s in lst)
False

如果要从字符串的开头强制执行匹配,请使用re.match

解释

any将检查迭代中是否存在任何真值。在第一个例子中,我们传递以下列表的内容(以生成器的形式):

>>> [re.search('\d', s) for s in lst]
[None, <_sre.SRE_Match object at 0x7f15ef317d30>, None]

有一个匹配对象是真实的,而None将始终在布尔上下文中求值为False。这就是any将为第二个示例返回False的原因:

>>> [re.search('\d{4}', s) for s in lst]
[None, None, None]