如果需要说
if: do_stuff()
我发现这个强大的构造从列表中提取匹配的字符串:
[m.group(1) for l in my_list for m in [my_regex.search(l)] if m]
......但这很难读懂和矫枉过正.我不想要列表,我只是想知道这样的列表是否包含任何内容.
是否有更简单的阅读方式来获得答案?
你可以简单地使用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]