有没有办法检查列表中的某个模式?

时间:2012-01-05 11:49:13

标签: python list design-patterns

有没有办法检查某种模式,以便何时使用该功能可以打印满足模式的列表中的元素......例如。

我有一个清单

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 个答案:

答案 0 :(得分:5)

我会使用正则表达式:

>>> 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 :(得分:1)

import re
pattern = re.compile('^([A-z]*)[,\.](\s*)([A-z]*)$')
filtered = [ l for l in abc if re.match(pattern,l) ]