web-dev-qa-db-fra.com

Expressions régulières: Recherche dans la liste

Je souhaite filtrer les chaînes d'une liste en fonction d'une expression régulière.

Y a-t-il quelque chose de mieux que [x for x in list if r.match(x)]?

55
leoluk

Vous pouvez créer un itérateur dans Python 3.x ou un liste dans Python 2.x en utilisant:

filter(r.match, list)

Pour convertir le Python 3.x itérateur en une liste, lancez-la simplement; list(filter(..)).

91
sepp2k

Exemple complet (Python 3):
Pour Python 2.x examine la note ci-dessous

import re

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

Impressions:

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

Remarque:

Pour Python 2.x, filter renvoie déjà une liste. Dans Python 3.x filter. a été modifié pour retourner un itérateur, il doit donc être converti en list (afin de le voir bien imprimé).

exemple de code Python
exemple de code Python 2.x

102
Mercury

Au cas où quelqu'un viendrait ici à l'avenir, il existe une autre façon de le faire en Pythonic. Vous devez d’abord créer le regex puis le filter

import re

inilist =["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
regex = re.compile(r'.*cat')
selectobj = filter(regex.search, inilist)
selectobj

résultats:

['cat', 'wildcat', 'thundercat']
13
MEdwin