ti-enxame.com

Expressões regulares: Pesquisar na lista

Eu quero filtrar seqüências de caracteres em uma lista com base em uma expressão regular.

Existe algo melhor que [x for x in list if r.match(x)]?

55
leoluk

Você pode criar um iterador em Python 3.x ou um lista em Python 2.x usando:

filter(r.match, list)

Para converter o iterador Python 3.x em uma lista, basta convertê-lo; list(filter(..)).

91
sepp2k

Exemplo completo (Python 3):
Para Python 2.x, observe a Nota abaixo

import re

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

Impressões:

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

Nota:

Para usuários de Python 2.x, filter já retorna uma lista. Em Python 3.x filter foi alterado para retornar um iterador, portanto ele deve ser convertido em list (para que seja bem impresso).

exemplo de código Python
exemplo de código Python 2.x

102
Mercury

Caso alguém venha aqui no futuro, existe outra maneira pitônica de fazê-lo. Primeiro você precisa criar o regex e depois filter

import re

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

resultados:

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