2012-01-05 8 views
0

には、特定のパターンをチェックする方法があります。そのような機能を使用すると、パターンを満たすリスト内の要素を印刷することができます。リスト内の特定のパターンをチェックする方法はありますか?

私はリスト

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'を持っているすべての文字列を取得することです。

あなたがリストの特定のパターンをどのように探すことができるのかを一般的な方法で教えてもらえれば、大きな助けとなります。

+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
import re 
pattern = re.compile('^([A-z]*)[,\.](\s*)([A-z]*)$') 
filtered = [ l for l in abc if re.match(pattern,l) ] 
関連する問題