파이썬에서 정규 표현식과 일치하는 모든 항목을 찾으려면 re 모듈의 re.findall() 또는 re.finditer() 메서드를 사용하면 됩니다. 두 메서드의 사용법과 차이점을 살펴보겠습니다.
1. re.findall() – 일치하는 문자열의 리스트 반환
re.findall(pattern, string)은 대상 문자열에서 패턴과 일치하는 모든 부분을 검색한 뒤, 결과를 문자열 리스트 형태로 반환합니다. 가장 간단하고 직관적인 방법입니다.
import re
text = "고양이 강아지 새 고양이"
result = re.findall(r"고양이", text)
print(result)
# 출력: ['고양이', '고양이']정규 표현식에 괄호로 감싼 캡처 그룹이 있다면, findall()은 전체 매치가 아닌 그룹에 해당하는 부분만 리스트로 반환한다는 점에 유의해야 합니다.
2. re.finditer() – MatchObject 반복자 반환
re.finditer(pattern, string)은 일치하는 항목들에 대한 MatchObject 반복자(iterator)를 반환합니다. 각 매치 객체에서는 시작 위치(start()), 끝 위치(end()), 캡처 그룹(group()) 등 상세 정보를 얻을 수 있습니다.
import re
text = "apple banana apple cherry"
for match in re.finditer(r"apple", text):
print(match.group(), match.start(), match.end())
# 출력:
# apple 0 5
# apple 13 18두 메서드의 차이점 비교
- re.findall(): 일치하는 문자열 자체만 필요할 때 적합하며, 결과를 즉시 리스트로 받아볼 수 있습니다.
- re.finditer(): 일치 위치나 그룹 정보 등 상세 데이터가 필요할 때 유용하고, 반복자 방식으로 동작하기 때문에 대용량 텍스트를 처리할 때 메모리 측면에서 더 효율적입니다.
요약하면, 단순히 일치 항목의 목록이 필요하다면 re.findall()을, 각 매치의 세부 정보나 메모리 효율성이 중요하다면 re.finditer()를 사용하는 것이 좋습니다.