2012-01-05 3 views
0

에는 특정 패턴을 검사하는 방법이 있으므로 해당 기능을 사용할 때 패턴을 충족하는 목록의 요소를 인쇄 할 수 있습니다.목록의 특정 패턴을 확인하는 방법이 있습니까?

내가 지금 내가 원하는 내가 형식 'xyz,abc'하고 목록 중 'x.abc'있는 모든 문자열을 얻을 수있는 목록을

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

있습니다.

사람들이 목록에서 특정 패턴을 찾을 수있는 일반적인 방법을 말할 수 있다면 큰 도움이 될 것입니다.

+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) ] 
관련 문제