Есть ли способ проверить определенный шаблон в списке? - PullRequest
0 голосов
/ 05 января 2012

есть ли способ проверить определенный шаблон, чтобы при использовании функции можно было распечатать элементы списка, соответствующие шаблону ... например,

У меня есть список

abc=['adams, brian','smith, will',' and j.smith. there is a long string here','some more strings','some numbers','etc etc']

Теперь я хочу получить из списка все строки, имеющие формат 'xyz,abc' и 'x.abc'.

Было бы очень полезно, если бы вы, ребята, могли бы рассказать мне об обобщенном способе поиска определенного шаблона в списке.

Ответы [ 2 ]

5 голосов
/ 05 января 2012

Я бы использовал регулярные выражения:

>>> import re
>>> exp = re.compile('(\w+\.\w+)|(\w+,\s?\w+)')
>>> map(exp.findall, abc)
[[('', 'adams, brian')], [('', 'smith, will')], [('j.smith', '')], [], [], []]

Функциональный способ выравнивания этого результата:

>>> r = map(exp.findall, abc)
>>> filter(None, sum(sum(r, []), ()))
('adams, brian', 'smith, will', 'j.smith')
1 голос
/ 05 января 2012
import re
pattern = re.compile('^([A-z]*)[,\.](\s*)([A-z]*)$')
filtered = [ l for l in abc if re.match(pattern,l) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...