백엔드/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
반응형