파이썬 공식 문서에 따르면, 정규식에서 특수 문자가 아닌 일반 문자는 자기 자신과 일치하지만, 특수 문자는 자기 자신과 일치하지 않고 각각 고유한 기능을 수행합니다. 아래에서 주요 특수 문자의 역할을 항목별로 정리했습니다.
1. 주요 특수 문자의 의미
| \ | 특수 문자를 이스케이프(escape)하거나 \d, \w 같은 특수 시퀀스를 시작합니다. |
| . | 줄바꿈(\n)을 제외한 임의의 한 문자와 일치합니다. re.DOTALL 플래그를 사용하면 줄바꿈 문자도 포함해 매칭합니다. |
| ^ | 문자열의 시작 위치와 일치합니다. re.MULTILINE 플래그를 사용하면 각 줄의 시작과도 일치합니다. |
| $ | 문자열의 끝 위치와 일치합니다. re.MULTILINE 플래그를 사용하면 각 줄의 끝과도 일치합니다. |
| [ ] | 매칭 대상이 될 문자들의 집합(character set)을 묶어 표현합니다. 예: [abc] |
| R|S | 정규식 R 또는 S 중 하나와 일치합니다(OR 조건). |
| ( ) | 캡처 그룹(capture group)을 생성하며, 패턴 내 연산의 우선순위를 지정합니다. |
2. 대괄호 [ ] 안에서의 특수 문자
'[' 뒤에 오는 문자 집합 안에서는 대부분의 특수 문자가 일반 문자로 취급되며, 다음 세 가지 문자만 특별한 의미를 가집니다.
| ] | 집합을 닫습니다. 단, 집합의 첫 번째 문자가 아닐 때만 유효합니다. |
| - | 문자 범위를 나타냅니다. 예: a-c는 'a', 'b', 'c' 중 하나와 일치합니다. |
| ^ | 집합의 첫 번째 문자로 올 때만 해당 집합을 부정(negate)합니다. 예: [^abc]는 a, b, c를 제외한 문자와 일치합니다. |
3. 수량자(Quantifiers)
수량자는 바로 앞의 패턴이 반복되는 횟수를 지정합니다. 수량자 뒤에 '?'를 붙이면 최소 매칭(non-greedy) 방식으로 동작합니다.
| {m} | 정확히 m번 반복 |
| {m,n} | m번(기본값 0)부터 n번(기본값 무한대)까지 반복 |
| * | 0회 이상 반복 ({0}와 동일) |
| + | 1회 이상 반복 ({1}와 동일) |
| ? | 0회 또는 1회 ({0,1}과 동일) |
4. 간단한 활용 예제
import re
# '.' : 임의의 한 문자와 일치
re.findall(r'a.c', 'abc aXc a\nc') # ['abc', 'aXc']
# '^', '$' : 문자열의 시작과 끝 확인
re.search(r'^Hello', 'Hello World') # 'Hello'로 시작하는지 검사
# '+' : 1회 이상 반복되는 숫자 추출
re.findall(r'\d+', 'abc123def456') # ['123', '456']특수 문자를 문자 그대로 매칭하고 싶다면 백슬래시(\)로 이스케이프하거나, re.escape() 함수를 사용하면 패턴을 안전하게 변환할 수 있습니다. 이러한 규칙만 익혀두면 복잡한 텍스트 처리 작업도 훨씬 수월하게 해결할 수 있습니다.