Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 정규 표현식 수정자(플래그) 완벽 가이드

Python에서 정규 표현식을 사용할 때 수정자(modifier), 즉 플래그(flag)를 함께 지정하면 매칭 동작을 세밀하게 제어할 수 있습니다. 수정자는 선택적으로 붙이는 옵션 값으로, 여러 개를 동시에 사용하고 싶다면 배타적 OR 연산자인 |(파이프)로 조합하면 됩니다.

예를 들어 대소문자 구분 없이 검색하면서 여러 줄 모드도 함께 적용하고 싶다면 re.I | re.M처럼 작성할 수 있습니다.

Python 정규 표현식 주요 수정자 목록

번호수정자 및 설명
1re.I
대소문자를 구분하지 않는 매칭(case-insensitive matching)을 수행합니다. 'Python'과 'python'을 동일하게 취급합니다.
2re.L
현재 로케일(locale) 설정에 따라 단어를 해석합니다. 이 옵션은 알파벳 그룹(\w, \W)뿐만 아니라 단어 경계 동작(\b, \B)에도 영향을 미칩니다.
3re.M
여러 줄(multiline) 모드를 활성화합니다. $가 문자열 전체의 끝뿐만 아니라 각 줄의 끝에도 매칭되고, ^ 역시 문자열 시작뿐만 아니라 각 줄의 시작에도 매칭됩니다.
4re.S
점(.) 메타 문자가 줄바꿈 문자(\n)를 포함한 모든 문자와 매칭되도록 합니다. 기본 상태에서는 점이 줄바꿈을 제외한 문자에만 매칭됩니다.
5re.U
문자를 유니코드(Unicode) 문자 집합 기준으로 해석합니다. 이 플래그는 \w, \W, \b, \B의 동작에 영향을 주며, 한글 등 비 ASCII 문자 처리에 유용합니다. 참고로 Python 3에서는 유니코드 매칭이 기본 동작입니다.
6re.X
더 읽기 쉬운(verbose) 정규 표현식 문법을 허용합니다. 공백 문자를 무시하며(문자셋 [] 내부나 백슬래시로 이스케이프된 경우는 예외), 이스케이프되지 않은 #를 주석 기호로 취급합니다. 복잡한 패턴에 설명을 덧붙여 가독성을 높일 때 유용합니다.

사용 예시

import re

# re.I : 대소문자 구분 없이 검색
result = re.search(r'hello', 'Hello World', re.I)
print(result.group())  # 출력: Hello

# re.M : 여러 줄에서 각 줄의 시작 위치 매칭
lines = re.findall(r'^\d+', '1번째 줄\n2번째 줄', re.M)
print(lines)  # 출력: ['1', '2']

# 여러 플래그 조합
result = re.search(r'world.', 'WORLD!\n', re.I | re.S)

마무리

정규 표현식 수정자를 잘 활용하면 코드를 더 간결하고 직관적으로 만들 수 있습니다. 특히 re.Ire.M은 실무에서 가장 자주 사용되는 플래그이므로 꼭 익혀두시길 권장합니다.