파이썬에서 정규 표현식과 일치하는 모든 것을 어떻게 찾을 수 있습니까?


312

내가 쓰고있는 프로그램에서 파이썬은 re.search()함수를 사용하여 텍스트 블록에서 일치하는 것을 찾고 결과를 인쇄하게합니다. 그러나 텍스트 블록에서 첫 번째 일치 항목을 찾으면 프로그램이 종료됩니다.

모든 일치 항목을 찾을 때까지 프로그램이 중지되지 않는 경우이 작업을 반복적으로 수행하려면 어떻게합니까? 이를 위해 별도의 기능이 있습니까?


재귀 RE 는 다른 짐승입니다. 검색을 반복하고 싶습니다.
outis

답변:


545

re.findall또는 re.finditer대신 사용하십시오 .

re.findall(pattern, string) 일치하는 문자열 목록을 반환합니다.

re.finditer(pattern, string)MatchObject객체에 대한 반복자를 반환 합니다.

예:

re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')
# Output: ['cats', 'dogs']

[x.group() for x in re.finditer( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')]
# Output: ['all cats are', 'all dogs are']

18
finditer내가 찾던 것이 었습니다. 하나는 Match 객체와 다른 문자열을 반환하는 것에 놀랐습니다. match_all또는 match_iter함수 를 사용할 것으로 기대했습니다 .
dsclose

21
면책 조항 : 겹치지 않는 경기 만 찾을 수 있습니다
Antoine Lizée

3
@ AntoineLizée, 반복이 중복되는 것을 어떻게 찾습니까?
Raksha

16
@Raksha- re.search루프에서 사용하십시오 . Match객체를 반환 합니다. 당신은에서 전달하려는 것 Match.start() + 1은 AS pos에 대한 인수 re.search루프의 다음 반복합니다.
ArtOfWarfare

3
일치하는 그룹이 둘 이상인 경우 findall일치하는 문자열 목록이 아닌 일치하는 튜플 목록을 반환합니다.
rodorgas 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.