정규 표현식 수정자(Modifier)란?
파이썬의 정규 표현식 리터럴에는 매칭 동작의 다양한 측면을 제어할 수 있는 선택적 수정자(modifier)를 지정할 수 있습니다. 수정자는 플래그(flag) 형태로 전달되며, 여러 개의 수정자를 동시에 적용하려면 배타적 논리합 연산자인 |를 사용해 조합하면 됩니다.
예를 들어 대소문자를 구분하지 않으면서 여러 줄 모드까지 함께 적용하려면 re.I | re.M처럼 작성하면 됩니다.
주요 정규 표현식 수정자 목록
1. re.I — 대소문자 무시
대소문자를 구분하지 않는(case-insensitive) 매칭을 수행합니다. 예를 들어 'python', 'Python', 'PYTHON'을 모두 같은 패턴으로 인식합니다.
2. re.L — 로케일 기반 해석
현재 시스템의 로케일(locale) 설정에 따라 단어를 해석합니다. 이 옵션은 알파벳 그룹(\w, \W)과 단어 경계(\b, \B)의 동작에 영향을 줍니다.
3. re.M — 다중 줄(Multiline) 모드
$가 문자열의 끝뿐만 아니라 각 줄의 끝과도 일치하도록 하고, ^ 역시 문자열의 시작뿐만 아니라 각 줄의 시작과도 일치하도록 만듭니다. 여러 줄로 된 텍스트를 줄 단위로 처리할 때 유용합니다.
4. re.S — DOTALL 모드
마침표(.)가 줄바꿈 문자(\n)를 포함한 모든 문자와 일치하도록 합니다. 기본 상태에서는 마침표가 줄바꿈을 제외한 문자에만 매칭되지만, 이 플래그를 사용하면 줄바꿈도 포함됩니다.
5. re.U — 유니코드 기반 해석
유니코드 문자 집합을 기준으로 문자를 해석합니다. 이 플래그는 \w, \W, \b, \B의 동작에 영향을 미쳐 한글 등 비 ASCII 문자도 올바르게 처리할 수 있게 합니다.
6. re.X — VERBOSE 모드
더 가독성 높은("cuter") 정규 표현식 문법을 허용합니다. 공백 문자를 무시하고(문자 집합 [] 내부 또는 백슬래시로 이스케이프된 경우는 제외), 이스케이프되지 않은 #을 주석 기호로 취급하므로 복잡한 패턴에 설명을 덧붙일 수 있습니다.
간단한 사용 예제
다음은 re.I 수정자를 활용해 대소문자와 관계없이 패턴을 검색하는 예제입니다.
import re
text = "Hello, Python World!"
match = re.search(r'python', text, re.I)
print(match.group()) # 출력: Python
이처럼 수정자를 상황에 맞게 조합하면 정규 표현식의 매칭 동작을 훨씬 유연하게 제어할 수 있습니다.