Python의 re 모듈에는 정규 표현식을 다루는 다양한 함수가 있으며, 그중 가장 많이 사용되는 두 가지가 바로 re.match()와 re.search()입니다. 두 함수는 비슷해 보이지만, 문자열에서 패턴을 찾는 방식에 중요한 차이가 있습니다.
re.match() — 문자열의 시작 부분에서만 매칭
re.match()는 패턴이 문자열의 맨 앞에서 일치할 때만 매칭 객체를 반환합니다. 예를 들어 'TP Tutorials Point TP'라는 문자열에서 'TP'라는 패턴을 찾으면, 패턴이 문자열 시작 부분에 있으므로 매칭에 성공합니다.
예제
import re
result = re.match(r'TP', 'TP Tutorials Point TP')
print(result.group(0))
실행 결과
TP
re.search() — 문자열 전체에서 매칭
re.search() 역시 re.match()와 마찬가지로 패턴을 검색하지만, 문자열의 시작 부분에 국한되지 않고 문자열 전체를 대상으로 패턴을 찾습니다.
예제
import re
result = re.search(r'Tutorials', 'TP Tutorials Point TP')
print(result.group(0))
실행 결과
Tutorials
위 예제에서 확인할 수 있듯이, search()는 문자열의 어느 위치에 있든 패턴을 찾아낼 수 있습니다. 반면 같은 문자열에 대해 match()로 'Tutorials' 패턴을 검색하면, 패턴이 문자열 시작에 없기 때문에 None을 반환합니다.
정리
- re.match(): 문자열의 시작 부분에서만 패턴을 검색합니다.
- re.search(): 문자열 전체를 스캔하여 첫 번째로 일치하는 패턴을 반환합니다.
따라서 문자열 중간이나 끝에 있는 패턴까지 찾아야 한다면 re.search()를 사용하는 것이 안전하고, 문자열이 특정 패턴으로 시작하는지 여부만 확인하면 되는 경우에는 re.match()가 적합합니다.