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

파이썬(Python) 정규 표현식 완벽 가이드 – 예제로 배우는 정규식 문법

정규 표현식(Regular Expression, Regex)은 문자열에서 특정 패턴을 검색, 치환, 추출할 때 사용하는 강력한 도구입니다. 파이썬에서는 re 모듈을 통해 정규식을 손쉽게 활용할 수 있으며, 데이터 처리나 텍스트 분석 업무에서 필수적인 기술입니다.

이 글에서는 파이썬 정규식의 핵심 문법을 카테고리별로 나누고, 각 패턴이 어떻게 동작하는지 예제와 함께 정리했습니다.


1. 리터럴(Literal) 문자

리터럴 문자는 특별한 의미 없이 문자 그대로 일치하는 패턴입니다.

번호예제 및 설명
1python
문자열 "python" 그 자체와 일치합니다.

2. 문자 클래스(Character Classes)

대괄호 []를 사용하면 여러 문자 중 하나와 일치시킬 수 있습니다.

번호예제 및 설명
1[Pp]ython
"Python" 또는 "python"과 일치
2rub[ye]
"ruby" 또는 "rube"와 일치
3[aeiou]
소문자 모음 하나와 일치
4[0-9]
임의의 숫자 하나와 일치 ([0123456789]와 동일)
5[a-z]
임의의 소문자 알파벳과 일치
6[A-Z]
임의의 대문자 알파벳과 일치
7[a-zA-Z0-9]
위의 모든 문자(영문 대소문자, 숫자)와 일치
8[^aeiou]
소문자 모음을 제외한 임의의 문자와 일치
9[^0-9]
숫자를 제외한 임의의 문자와 일치

3. 특수 문자 클래스

자주 사용되는 문자 집합은 미리 정의된 축약형으로 제공됩니다.

번호예제 및 설명
1.
줄바꿈(newline)을 제외한 임의의 한 문자와 일치
2\d
숫자 하나와 일치: [0-9]
3\D
숫자가 아닌 문자와 일치: [^0-9]
4\s
공백 문자와 일치: [ \t\r\n\f]
5\S
공백이 아닌 문자와 일치: [^ \t\r\n\f]
6\w
단어 문자 하나와 일치: [A-Za-z0-9_]
7\W
단어 문자가 아닌 문자와 일치: [^A-Za-z0-9_]

4. 반복 패턴(Repetition)

수량자(quantifier)를 사용하면 앞의 문자나 그룹이 반복되는 횟수를 지정할 수 있습니다.

번호예제 및 설명
1ruby?
"rub" 또는 "ruby"와 일치 (y는 0번 또는 1번 출현, 즉 선택 사항)
2ruby*
"rub" 뒤에 y가 0개 이상 붙는 패턴과 일치
3ruby+
"rub" 뒤에 y가 1개 이상 붙는 패턴과 일치
4\d{3}
정확히 3자리 숫자와 일치
5\d{3}
3자리 이상의 숫자와 일치
6\d{3,5}
3~5자리 숫자와 일치

5. 비탐욕적(Non-greedy) 반복

기본 반복은 가능한 한 많이 일치시키는 '탐욕적(greedy)' 방식입니다. 수량자 뒤에 ?를 붙이면 가장 적은 수의 반복만 일치시키는 '비탐욕적' 방식으로 동작합니다.

번호예제 및 설명
1<.*>
탐욕적 반복: "<python>perl>" 문자열에서 <python>perl> 전체와 일치
2<.*?>
비탐욕적 반복: 같은 문자열에서 첫 번째 닫는 괄호까지만, 즉 "<python>"만 일치

6. 괄호를 이용한 그룹화(Grouping)

소괄호 ()로 패턴을 묶으면 수량자가 그룹 전체에 적용됩니다.

번호예제 및 설명
1\D\d+
그룹 없음: + 수량자가 \d에만 적용됨
2(\D\d)+
그룹 지정: + 수량자가 \D\d 쌍 전체에 적용됨
3([Pp]ython(, )?)+
"Python", "Python, python, python" 등 반복되는 패턴과 일치

7. 역참조(Backreferences)

역참조는 앞서 매칭된 그룹과 동일한 내용을 다시 한번 일치시킬 때 사용합니다.

번호예제 및 설명
1([Pp])ython&\1ails
"python&pails" 또는 "Python&Pails"와 일치 (\1이 첫 그룹과 동일한 문자를 재사용)
2(['"])[^\1]*\1
작은따옴표 또는 큰따옴표로 감싸인 문자열과 일치. \1은 첫 번째 그룹이 매칭한 문자(따옴표), \2는 두 번째 그룹의 결과를 다시 참조하는 식으로 동작합니다.

8. 선택(Alternatives)

|(OR 연산자)를 사용하면 여러 패턴 중 하나와 일치시킬 수 있습니다.

번호예제 및 설명
1python|perl
"python" 또는 "perl"과 일치
2rub(y|le)
"ruby" 또는 "ruble"과 일치
3Python(!+|\?)
"Python" 뒤에 느낌표(!)가 하나 이상 오거나 물음표(?)가 하나 오는 경우와 일치

9. 앵커(Anchors)

앵커는 문자 자체가 아닌 매칭 위치를 지정할 때 사용합니다.

번호예제 및 설명
1^Python
문자열의 시작 또는 내부 줄의 시작에 있는 "Python"과 일치
2Python$
문자열 또는 줄의 끝에 있는 "Python"과 일치
3\APython
문자열 전체의 시작에 있는 "Python"과 일치
4Python\Z
문자열 전체의 끝에 있는 "Python"과 일치
5\bPython\b
단어 경계(word boundary)에 있는 "Python"과 일치
6\brub\B
\B는 단어 경계가 아닌 위치를 의미: "rube", "ruby" 안의 "rub"과는 일치하지만 독립된 "rub"에는 일치하지 않음
7Python(?=!)
긍정형 전방 탐색: 바로 뒤에 느낌표(!)가 있을 때만 "Python"과 일치
8Python(?!!)
부정형 전방 탐색: 바로 뒤에 느낌표(!)가 없을 때만 "Python"과 일치

마무리

위 표의 패턴들은 파이썬 re 모듈의 re.match(), re.search(), re.findall() 등과 함께 사용하면 실전에서 바로 활용할 수 있습니다. 처음에는 문자 클래스와 반복 수량자부터 익히고, 점차 그룹화·역참조·앵커로 확장해 나가면 정규식을 체계적으로 마스터할 수 있습니다.