Регулярные выражения: поиск в списке - PullRequest
49 голосов
/ 04 сентября 2010

Я хочу отфильтровать строки в списке на основе регулярного выражения.

Есть ли что-то лучше, чем [x for x in list if r.match(x)]?

Ответы [ 3 ]

91 голосов
/ 20 сентября 2016

Полный пример (Python 3):
Для Python 2.x смотрите примечание ниже

import re

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

Печать:

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

Примечание:

Для пользователей Python 2.x filter уже возвращает список. В Python 3.x filter был изменен, чтобы возвращать итератор, поэтому он должен быть преобразован в list (для того, чтобы он хорошо распечатывался).

Пример кода Python 3
Пример кода Python 2.x

87 голосов
/ 04 сентября 2010

Вы можете создать итератор в Python 3.x или список в Python 2.x, используя:

filter(r.match, list)

Для преобразования Python 3.x итератор в список, просто приведите его;list(filter(..)).

12 голосов
/ 13 ноября 2018

На всякий случай, если кто-то придет сюда в будущем, есть другой питонский способ сделать это.Сначала нужно создать regex, а затем filter

import re

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

результаты:

['cat', 'wildcat', 'thundercat']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...