백엔드/Python

[python] Regex(정규식) re.match()와 re.search()

작은소행성☄️ 2025. 3. 21. 13:27
728x90

Python의 re 모듈에서 자주 쓰이는 두 함수 re.match()re.search()는 이름이 비슷해서 헷갈리기 쉽다.

하지만 이 둘은 동작 방식에 큰 차이가 있다.

 

이 글에서는 두 함수의 차이점을 예시와 함께 알아보고, 언제 어떤 걸 써야 하는지도 정리해보았다.

 

 

공통점

정규표현식을 사용해 문자열에서 패턴을 찾는다.

두 함수 모두 re 모듈의 함수이고, 사용법도 비슷하다.

import re

re.match(pattern, string)
re.search(pattern, string)

 

차이점 

항목 re.match() re.search()
매칭 위치 문자열의 처음부터 패턴을 찾음 문자열 전체에서 첫 번째 패턴을 찾음
실패 조건 시작 부분이 패턴에 맞지 않으면 None 문자열 어딘가에 패턴이 있으면 성공
속도/효율 시작만 검사하므로 약간 더 빠를 수 있음 전체를 검사해야 하므로 상대적으로 느림

 

 

예제

import re

text = "Hello 123 world"

# match: 문자열 처음이 "Hello"면 OK
m1 = re.match(r"\d+", text)
print(m1)  # ❌ None (숫자가 처음에 없기 때문)

# search: 문자열 어디든 숫자가 있으면 OK
s1 = re.search(r"\d+", text)
print(s1.group())  # ✅ 123

예제 설명:

re.match(r"\d+", text)는 문자열의 맨 앞이 숫자여야 작동

re.search(r"\d+", text)는 문자열 어디든 숫자 123이 있으므로 매칭 성공

 

 

실전에서 자주 쓰는 상황

상황추천 함수
문자열이 특정 형식으로 시작하는지 확인 re.match()
문자열 어딘가에 특정 패턴이 포함됐는지 re.search()

 

예제

# 전화번호가 010으로 시작하는지?
re.match(r"010", phone_number)

# 문장 안에 날짜가 포함되어 있는지?
re.search(r"\d{4}-\d{2}-\d{2}", sentence)

 

group()의 차이

둘 다 match 또는 search 객체를 반환하고, group() 메서드로 매칭된 결과를 꺼낼 수 있다. 

text = "ID: 4567"

match_obj = re.search(r"\d+", text)
print(match_obj.group())  # 출력: 4567

 

⚠️ 매칭 실패 시 None이 되므로 group() 호출 전에 if match: 체크가 필요하다.

 

 

문자열이 어떤 패턴으로 시작해야 하는지 검사 → re.match()
문자열 어딘가에 패턴이 포함되어 있는지 검사 → re.search()

 

728x90
반응형