파이썬에서 match()는 정규 표현식을 다루는 re 모듈에 포함된 함수로, 주어진 패턴이 문자열의 맨 앞(시작 부분)과 일치하는지 확인할 때 사용합니다.
match() 기본 문법
re.match(pattern, string)
이 함수는 패턴이 문자열의 시작 부분에서 일치할 때만 매치 객체(Match object)를 반환하며, 일치하지 않으면 None을 반환합니다. 문자열 중간에서의 일치는 검사하지 않는다는 점이 re.search()와의 핵심적인 차이입니다.
기본 동작 원리 이해하기
예를 들어 'TP Tutorials Point TP'라는 문자열에서 'TP'라는 패턴을 찾으면, 문자열이 'TP'로 시작하기 때문에 매치에 성공합니다. 반면 'Tutorials'를 찾으면 해당 단어로 시작하지 않으므로 매치에 실패합니다. 코드로 직접 확인해 보겠습니다.
예제 1: 문자열 시작 부분에서 패턴 찾기
import re
result = re.match(r'TP', 'TP Tutorials Point TP')
print(result)
실행 결과
<re.Match object; span=(0, 2), match='TP'>
매치 객체가 반환된 것으로 보아 패턴 일치가 발견되었음을 알 수 있습니다. 매치 객체에는 실제 일치한 문자열 정보가 담겨 있으며, group() 메서드를 호출하면 일치한 문자열을 추출할 수 있습니다.
또한 패턴 문자열 앞에 붙인 접두사 r은 파이썬의 raw string(원시 문자열)을 의미합니다. 백슬래시(\)를 이스케이프 문자로 해석하지 않고 그대로 유지해 주기 때문에, 정규 표현식 작성 시 관례적으로 붙여 주는 것이 좋습니다.
예제 2: group() 메서드로 매칭된 문자열 출력하기
import re
result = re.match(r'TP', 'TP Tutorials Point TP')
print(result.group(0))
실행 결과
TP
패턴이 일치하지 않는 경우
이번에는 같은 문자열에서 'Tutorials'를 찾아 보겠습니다. 문자열이 'Tutorials'로 시작하지 않기 때문에 매치에 실패하고 None이 반환됩니다.
예제 3: 매치 실패 확인하기
import re
result = re.match(r'Tutorials', 'TP Tutorials Point TP')
print(result)
실행 결과
None
핵심 정리
- re.match()는 문자열의 시작 부분에서만 패턴을 검색합니다.
- 문자열 전체에서 패턴을 찾고 싶다면 re.search()를 사용하는 것이 적합합니다.
- 반환값은 매치 객체 또는 None이므로,
if result is not None:과 같은 조건문으로 안전하게 처리하는 습관이 좋습니다. - 일치한 문자열은
group(0)메서드로 추출할 수 있습니다.
참고로 원문 예제는 구버전 파이썬 2(print 문) 문법을 사용했지만, 본 글에서는 현재 표준인 파이썬 3의 print() 함수 문법으로 수정하여 소개했습니다.