ewok ewok - 5 months ago 10
Python Question

Python: if any strings in a list match regex

I need to check if any of the strings in a list match a regex. If any do, I want to continue. The way I've always done it in the past is using list comprehension with something like:

r = re.compile('.*search.*')
if [line for line in output if r.match(line)]:
do_stuff()


Which I now realize is pretty inefficient. If the very first item in the list matches, we can skip all the rest of the comparisons and move on. I could improve this with:

r = re.compile('.*search.*')
for line in output:
if r.match(line):
do_stuff()
break


But I'm wondering if there's a more pythonic way to do this.

Answer

You can use the builtin any():

if any(re.match(line) for line in output):
    do_stuff()

Passing in the lazy generator to any() will allow it to exit on the first match without having to check any farther into the iterable.

Comments