Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 정규식 re.finditer() 메서드 사용법 완벽 가이드

re.finditer() 메서드란?

파이썬 공식 문서에 따르면 re.finditer()는 다음과 같은 형태로 사용됩니다.

re.finditer(pattern, string, flags=0)

이 메서드는 정규식 패턴이 문자열 내에서 일치하는 모든 비중첩(non-overlapping) 매치에 대해 매치 객체(MatchObject)를 하나씩 반환하는 이터레이터(iterator)를 생성합니다. 문자열은 왼쪽에서 오른쪽 방향으로 검색되며, 매치 결과는 발견된 순서대로 얻을 수 있습니다. 빈 문자열과의 매치(Empty match) 역시 결과에 포함됩니다.

re.finditer()의 주요 특징

  • 이터레이터 반환: 전체 결과를 한 번에 메모리에 담지 않고 필요할 때마다 하나씩 꺼내 쓸 수 있어 대용량 텍스트 처리에 유리합니다.
  • 매치 객체 제공: 단순히 일치한 문자열뿐 아니라 start(), end(), group(), span() 등 위치와 그룹 정보를 모두 활용할 수 있습니다.
  • 순차적 검색: 문자열을 왼쪽에서 오른쪽으로 스캔하며 매치를 발견한 순서대로 반환합니다.

사용 예제

다음 코드는 파이썬 정규식에서 re.finditer() 메서드를 활용하는 기본적인 예입니다.

import re

s1 = 'Blue Berries'
pattern = 'Blue Berries'

for match in re.finditer(pattern, s1):
    s = match.start()
    e = match.end()
    print(f'문자열 매치 "{s1[s:e]}" at {s}:{e}')

실행 결과

문자열 매치 "Blue Berries" at 0:12

코드 설명

위 예제에서 match.start()는 매치가 시작되는 인덱스를, match.end()는 매치가 끝나는 인덱스(다음 문자 위치)를 반환합니다. 따라서 슬라이싱 s1[s:e]를 통해 실제로 일치한 문자열 "Blue Berries"를 추출할 수 있으며, 위치 정보 0:12는 시작 인덱스 0부터 종료 인덱스 12까지를 의미합니다.

re.findall()과의 차이점

re.findall()은 일치한 문자열들의 리스트를 즉시 반환하는 반면, re.finditer()는 매치 객체를 담은 이터레이터를 반환합니다. 매치의 위치 정보가 필요하거나, 텍스트가 매우 길어 메모리 효율성이 중요한 경우에는 re.finditer()를 사용하는 것이 좋습니다.