Python에서 정규식을 다룰 때 가장 많이 사용되는 두 가지 메서드가 바로 re.match()와 re.search()입니다. 두 메서드 모두 표준 라이브러리인 re 모듈에 포함되어 있으며, 문자열에서 특정 패턴을 찾는다는 공통점이 있지만 동작 방식에는 중요한 차이가 있습니다.
re.match() — 문자열의 시작 부분에서만 매칭
re.match()는 패턴이 문자열의 맨 앞에서 시작되는 경우에만 매칭을 성공으로 처리합니다. 예를 들어, 문자열 'TP Tutorials Point TP'에서 패턴 'TP'를 찾으면 문자열이 'TP'로 시작하기 때문에 매칭에 성공합니다.
예제 코드
import re result = re.match(r'TP', 'TP Tutorials Point TP') print(result.group(0))
실행 결과
TP
만약 패턴이 문자열 중간에만 존재하고 시작 부분에 없다면, re.match()는 None을 반환합니다. 이 점이 re.search()와의 핵심적인 차이입니다.
re.search() — 문자열 전체에서 패턴 탐색
re.search()는 re.match()와 유사하지만, 매칭 위치를 문자열의 시작 부분으로 제한하지 않습니다. 대신 문자열 전체를 스캔하면서 패턴과 일치하는 첫 번째 위치를 찾아냅니다.
예제 코드
import re result = re.search(r'Tutorials', 'TP Tutorials Point TP') print(result.group(0))
실행 결과
Tutorials
위 결과에서 확인할 수 있듯이, re.search()는 문자열의 어느 위치에 있는 패턴이든 찾아낼 수 있습니다. 만약 re.match()로 'Tutorials'를 검색했다면 문자열 시작 부분에 해당 패턴이 없기 때문에 None이 반환되었을 것입니다.
정리: 언제 무엇을 사용해야 할까?
- re.match(): 문자열이 특정 패턴으로 시작하는지 확인할 때 적합합니다. 예를 들어 입력값의 형식 검증 등에 유용합니다.
- re.search(): 문자열 내 어디든 패턴이 존재하는지 확인할 때 적합합니다. 로그 분석, 텍스트 데이터 추출 등 대부분의 경우에 더 범용적으로 활용됩니다.
두 메서드 모두 매칭에 성공하면 Match 객체를 반환하며, group(0)으로 매칭된 문자열을 얻을 수 있습니다. 반면 매칭에 실패하면 None을 반환하므로, 실제 코드에서는 반환값이 None인지 반드시 확인한 후 사용하는 것이 안전합니다.