re.match(), re.search(), re.findall()은 모두 Python의 정규표현식(regular expression) 처리를 담당하는 re 모듈이 제공하는 핵심 메서드입니다. 세 메서드는 비슷해 보이지만 패턴을 검색하는 범위와 반환 방식에서 중요한 차이가 있습니다.
1. re.match() 메서드
re.match()는 문자열의 시작 부분에서만 패턴이 일치하는지 확인합니다. 문자열 중간에 패턴이 존재하더라도 시작 위치에서 일치하지 않으면 None을 반환합니다.
예를 들어, 'TP Tutorials Point TP'라는 문자열에 대해 패턴 'TP'를 검색하면 문자열이 'TP'로 시작하기 때문에 매칭에 성공합니다.
예제 코드
import re result = re.match(r'TP', 'TP Tutorials Point TP') print(result.group(0))
실행 결과
TP
2. re.search() 메서드
re.search()는 re.match()와 유사하지만, 검색 범위가 문자열 전체로 확장된다는 점이 다릅니다. 즉, 패턴이 문자열의 어느 위치에 있든 첫 번째로 일치하는 부분을 찾아 반환합니다.
예제 코드
import re result = re.search(r'Tutorials', 'TP Tutorials Point TP') print(result.group(0))
실행 결과
Tutorials
'Tutorials'는 문자열의 시작 부분에 있지 않기 때문에 re.match()로는 찾을 수 없지만, re.search()는 문자열 전체를 훑어 성공적으로 매칭합니다.
3. re.findall() 메서드
re.findall()은 주어진 문자열에서 패턴과 일치하는 모든 항목을 리스트(list) 형태로 반환합니다. 문자열의 처음부터 끝까지 검색하며, 일치하는 모든 발생(occurrence)을 한꺼번에 얻을 수 있습니다.
예제 코드
import re result = re.findall(r'TP', 'TP Tutorials Point TP') print(result)
실행 결과
['TP', 'TP']
문자열 내에 'TP'가 두 번 등장하므로 두 개의 결과가 리스트로 반환됩니다. 단일 매칭 객체가 아닌 문자열 리스트를 직접 반환하기 때문에 반복문과 함께 사용하기에도 편리합니다.
세 메서드 비교 요약
- re.match(): 문자열 시작 부분에서만 매칭 여부를 확인
- re.search(): 문자열 전체를 검색하여 첫 번째 매칭 결과 반환
- re.findall(): 문자열 전체에서 일치하는 모든 패턴을 리스트로 반환
패턴이 문자열 어디에 있는지 확실하지 않거나, 일치하는 모든 항목이 필요한 경우라면 re.findall()을 사용하는 것이 가장 안전하고 효율적입니다. 상황에 맞는 메서드를 선택하면 정규표현식 기반 텍스트 처리를 훨씬 깔끔하게 구현할 수 있습니다.