Python 정규 표현식 패턴 개요
Python에서 정규 표현식(regular expression)은 문자열 검색, 치환, 유효성 검사 등에 활용되는 강력한 도구입니다. re 모듈을 통해 다양한 패턴 문법을 사용할 수 있습니다.
특수 제어 문자인 ( + ? . * ^ $ ( ) [ ] { } | \ )를 제외한 모든 문자는 자기 자신과 일치합니다. 이러한 제어 문자를 문자 그대로 매칭하려면 앞에 백슬래시(\)를 붙여 이스케이프 처리하면 됩니다.
아래 표는 Python에서 사용할 수 있는 주요 정규 표현식 문법을 정리한 것입니다.
정규 표현식 패턴 목록
| 번호 | 패턴 및 설명 |
|---|---|
| 1 | ^ 줄(line)의 시작과 일치합니다. |
| 2 | $ 줄의 끝과 일치합니다. |
| 3 | . 줄바꿈 문자를 제외한 임의의 단일 문자와 일치합니다. m 옵션을 사용하면 줄바꿈 문자도 일치시킬 수 있습니다. |
| 4 | [...] 대괄호 안에 포함된 임의의 단일 문자와 일치합니다. |
| 5 | [^...] 대괄호 안에 포함되지 않은 임의의 단일 문자와 일치합니다. |
| 6 | re* 앞의 표현식이 0번 이상 반복되는 경우와 일치합니다. |
| 7 | re+ 앞의 표현식이 1번 이상 반복되는 경우와 일치합니다. |
| 8 | re? 앞의 표현식이 0번 또는 1번 나타나는 경우와 일치합니다. |
| 9 | re{ n} 앞의 표현식이 정확히 n번 반복되는 경우와 일치합니다. |
| 10 | re{ n} 앞의 표현식이 n번 이상 반복되는 경우와 일치합니다. |
| 11 | re{ n, m} 앞의 표현식이 최소 n번, 최대 m번 반복되는 경우와 일치합니다. |
| 12 | a| b a 또는 b 중 하나와 일치합니다. |
| 13 | (re) 정규 표현식을 그룹으로 묶고, 일치한 텍스트를 기억합니다. |
| 14 | (?imx) 정규 표현식 내에서 i, m, x 옵션을 일시적으로 활성화합니다. 괄호 안에 있으면 해당 영역에만 적용됩니다. |
| 15 | (?-imx) 정규 표현식 내에서 i, m, x 옵션을 일시적으로 비활성화합니다. 괄호 안에 있으면 해당 영역에만 적용됩니다. |
| 16 | (?: re) 일치한 텍스트를 기억하지 않고 정규 표현식을 그룹화합니다. |
| 17 | (?imx: re) 괄호 안에서 i, m, x 옵션을 일시적으로 활성화합니다. |
| 18 | (?-imx: re) 괄호 안에서 i, m, x 옵션을 일시적으로 비활성화합니다. |
| 19 | (?#...) 주석(comment)입니다. |
| 20 | (?= re) 패턴을 이용해 위치를 지정합니다(긍정형 전방 탐색). 소비 범위가 없습니다. |
| 21 | (?! re) 패턴의 부정을 이용해 위치를 지정합니다(부정형 전방 탐색). 소비 범위가 없습니다. |
| 22 | (?> re) 역추적(backtracking) 없이 독립적인 패턴과 일치합니다. |
| 23 | \w 단어 문자(word characters)와 일치합니다. |
| 24 | \W 단어 문자가 아닌 문자와 일치합니다. |
| 25 | \s 공백 문자와 일치합니다. [\t\n\r\f]와 동일합니다. |
| 26 | \S 공백이 아닌 문자와 일치합니다. |
| 27 | \d 숫자(digit)와 일치합니다. [0-9]와 동일합니다. |
| 28 | \D 숫자가 아닌 문자와 일치합니다. |
| 29 | \A 문자열(string)의 시작과 일치합니다. |
| 30 | \Z 문자열의 끝과 일치합니다. 줄바꿈 문자가 존재하면 그 바로 앞 지점과 일치합니다. |
| 31 | \z 문자열의 끝과 일치합니다. |
| 32 | \G 마지막 매칭이 종료된 지점과 일치합니다. |
| 33 | \b 대괄호 밖에서는 단어 경계(word boundary)와 일치하고, 대괄호 안에서는 백스페이스(0x08)와 일치합니다. |
| 34 | \B 단어 경계가 아닌 지점과 일치합니다. |
| 35 | \n, \t 등 줄바꿈(newline), 캐리지 리턴(carriage return), 탭(tab) 등과 일치합니다. |
| 36 | \1...\9 n번째로 그룹화된 하위 표현식(subexpression)과 일치합니다. |
| 37 | \10 이미 매칭된 경우 n번째 그룹화된 하위 표현식과 일치하며, 그렇지 않으면 문자 코드의 8진수(octal) 표현을 참조합니다. |
마무리
정규 표현식은 처음에는 복잡해 보일 수 있지만, 위 패턴들을 익혀두면 텍스트 처리 작업을 훨씬 효율적으로 수행할 수 있습니다. 실제 코드에 적용하기 전에 re.compile()로 패턴을 미리 컴파일하면 성능 면에서도 유리합니다.