Regular Expressions: Search in list

Question:

I want to filter strings in a list based on a regular expression.

Is there something better than [x for x in list if r.match(x)] ?

Asked By: leoluk

||

Answers:

You can create an iterator in Python 3.x or a list in Python 2.x by using:

filter(r.match, list)

To convert the Python 3.x iterator to a list, simply cast it; list(filter(..)).

Answered By: sepp2k

Full Example (Python 3):
For Python 2.x look into Note below

import re

mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = list(filter(r.match, mylist)) # Read Note below
print(newlist)

Prints:

['cat', 'wildcat', 'thundercat']

Note:

For Python 2.x developers, filter returns a list already. In Python 3.x filter was changed to return an iterator so it has to be converted to list (in order to see it printed out nicely).

Python 3 code example
Python 2.x code example

Answered By: Mercury

To do so without compiling the Regex first, use a lambda function – for example:

from re import match

values = ['123', '234', 'foobar']
filtered_values = list(filter(lambda v: match('^d+$', v), values))

print(filtered_values)

Returns:

['123', '234']

filter() just takes a callable as it’s first argument, and returns a list where that callable returned a ‘truthy’ value.

Answered By: Collin Heist
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.