2014-05-25 3 views
0
>>> import re 
>>> p=re.compile('(a(.)c)d') 

다음은 'abcd'만 반환하고 'aecd'도 반환하지 않는 이유는 무엇입니까? 둘 다 돌려 주려면 어떻게해야합니까? 내가 단지 aecd을 돌려 주기만한다면, 나는 무엇을해야합니까?모든 일치 항목을 파이썬에서 정규식으로 반환합니다.

>>> m=p.match('abcdeaecd') 
>>> m.group() 
'abcd' 
>>> m.groups() 
('abc', 'b') 

감사합니다!

답변

2

당신은 그렇지 않으면 당신이 자신을 당신의 정규식을 사용하고 같은 경기를 반복 수있는이

import re 
p=re.compile(r'a.cd') 

처럼, 당신의 정규식을 단순화하고이

print p.findall('abcdeaecd') 
# ['abcd', 'aecd'] 

처럼, 모든 경기를 얻을 수 re.findall을 사용할 수 있습니다 이

print [item.group() for item in p.finditer('abcdeaecd')] 
# ['abcd', 'aecd'] 
+0

감사합니다. (1)'p.match'는 첫 번째 매치만을 반환합니까? (2) 마지막 경기를 반환하려면 어떻게해야합니까? – Tim

+0

@Tim'match'는 문자열의 시작 부분에서 패턴을 일치 시키려고 시도하고 처음부터 찾은 일치 항목 만 반환합니다. 문자열이'a' 이외의 것으로 시작 되었다면, 아무것도 일치하지 않을 것입니다. – thefourtheye

+0

@Tim'p.match'는 첫 번째 일치를 반환합니다. 그러나이 대답은 일치하는 문자열 만 반환하고 Match 객체를 반환하지 않습니다. 특히 캡처 링 그룹에 액세스 할 수 없습니다. – ikdc

2

finditer 대신 match :

ms = p.finditer('abcdeaecd') 
    for m in ms: 
     # do something with m.group or m.groups 
관련 문제