파이썬 정규표현식 마스터: re.match(), re.search(), re.findall() 실전 예제
파이썬에서 정규표현식이란?
정규표현식(regex)은 파이썬이 문자열 내에서 패턴을 찾는 방법을 알려주는 간결한 텍스트 설명입니다. 정규식은 코드베이스, 로그, 설정 파일, 웹 스크래핑 프로젝트에서 데이터 추출, 검증, 변환에 필수적입니다.
파이썬에서 re 모듈은 인터프리터에 내장되어 있으며, 패턴 컴파일, 검색, 치환을 위한 풍부한 API를 제공합니다. 사용자 입력 필터링, 로그 파싱, 웹사이트 콘텐츠 스크래핑 등 어떤 작업이든 정규식 기초를 탄탄히 익히면 시간을 절약하고 버그를 줄일 수 있습니다.
핵심 정규식 개념
- 리터럴 문자 – 작성한 텍스트와 정확히 일치
- 메타문자 – 클래스, 범위, 수량자를 설명하는 특수 기호(예:
\d, \w, +, ?, *)
- 앵커 –
^와 $로 패턴을 문자열 시작이나 끝에 고정
- 수량자 – 토큰이 반복될 횟수 지정
- 그룹과 대안 – 부분 매치 캡처와 다중 옵션 허용
- 플래그 – 패턴 동작 조정(대소문자 무시, 멀티라인 등)
자주 쓰는 식별자표
| 식별자 | 설명 | 공백 | 특수 이스케이프 |
| \d | 모든 숫자(0-9) | \n | ., +, *, ?, [], $, ^, (, ), {}, |, \ |
| \D | 숫자가 아닌 문자 | \s | |
| \s | 공백, 탭, 줄바꿈 등 | \t | |
| \S | 공백이 아닌 문자 | \e | |
| \w | 영숫자 및 밑줄 | \r | |
| \W | 영숫자가 아닌 문자(밑줄 제외) | \f | |
| . | 줄바꿈을 제외한 모든 문자 | — | |
| \b | 단어 경계 | — | |
| \. | 리터럴 마침표 | — | |
| \{x} | 정확히 x번 발생 | — | |
re 모듈 시작하기
import re
re 모듈은 파이썬 표준 라이브러리 일부로 외부 의존성이 필요 없습니다. 주요 사용 사례:
- 문자열 검증(이메일 주소, 전화번호 등)
- 비정형 텍스트에서 데이터 추출
- 자동화된 웹 스크래핑
예제 1: \w+와 ^
^ – 문자열 시작에 앵커
\w+ – 하나 이상의 단어 문자(문자, 숫자, 밑줄)
이를 이용해 문자열의 첫 단어를 캡처할 수 있습니다:
import re
sample = "guru99, education is fun"
result = re.findall(r"^\w+", sample)
print(result) # 출력: ['guru99']
+를 제거하면 첫 글자만 반환: ["g"].
예제 2: \s로 공백 기준 분할
re.split() 함수는 패턴이 일치하는 곳에서 문자열을 나눕니다. \s를 사용하면 모든 공백 문자에서 분할됩니다.
import re
text = "we are splitting the words"
print(re.split(r"\s", text)) # ['we', 'are', 'splitting', 'the', 'words']
백슬래시를 생략하면 s가 리터럴로 취급되어 모든 s 문자에서 분할됩니다.
정규식 메서드 개요
re.match() – 문자열 처음에서만 매치 확인
re.search() – 문자열 전체를 스캔하여 첫 번째 매치 반환
re.findall() – 겹치지 않는 모든 매치 리스트 반환
re.match() 사용
import re
text = "guru99 is a great platform"
match = re.match(r"^\w+", text)
print(match.group() if match else "No match") # 출력: guru99
re.search() 사용
import re
text = "Software Testing is fun"
for pattern in ["Software testing", "guru99"]:
found = re.search(pattern, text, re.IGNORECASE)
print(f"Looking for '{pattern}' in '{text}' - {'found a match!' if found else 'no match'}")
re.findall() 사용
import re
emails = "guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com"
found = re.findall(r"[\w\.-]+@[\w\.-]+", emails)
for e in found:
print(e)
정규식 플래그
플래그는 패턴 동작을 수정합니다. 주요 플래그:
| 플래그 | 설명 |
| re.M (re.MULTILINE) | ^와 $가 각 줄의 시작과 끝과 매치되게 함 |
| re.I (re.IGNORECASE) | 대소문자 구분 무시 |
| re.S (re.DOTALL) | 점이 줄바꿈과도 매치되게 함 |
| re.U (re.UNICODE) | 유니코드 인식 문자 클래스 적용 |
| re.L (re.LOCALE) | 클래스가 현재 로케일에 의존하게 함 |
| re.X (re.VERBOSE) | 패턴에 공백과 주석 허용 |
멀티라인 예제
import re
text = """guru99
careerguru99
selenium"""
print(re.findall(r"^\w", text)) # ['g']
print(re.findall(r"^\w", text, re.MULTILINE)) # ['g', 'c', 's']
파이썬 2 호환성
위 예제는 모두 파이썬 3용으로 작성되었습니다. 파이썬 2에서 실행해야 한다면 print() 문을 파이썬 2 문법으로 바꾸고 re 모듈을 동일하게 임포트하면 됩니다.
핵심 정리
파이썬 정규식을 마스터하면 텍스트 처리를 위한 강력한 도구상자를 갖게 됩니다:
- 시작에 고정된 패턴에는
re.match() 사용
- 전역 검색에는
re.search() 사용
- 모든 매치 추출에는
re.findall() 사용
- 플래그(예:
re.IGNORECASE, re.MULTILINE)로 동작 미세 조정
- 배포 전 Regex101 같은 도구로 패턴 테스트 필수