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

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

정규 표현식(Regular Expression, Regex)은 주어진 문자열 안에 특정 패턴이 존재하는지 확인하기 위해 사용되는 일종의 미니 프로그래밍 언어입니다. 문자열에서 원하는 검색 패턴이 있는지 검사하는 도구로, 데이터 전처리, 입력값 유효성 검사, 텍스트 추출 및 치환 등 실무에서 폭넓게 활용됩니다.

1. re 모듈 불러오기

파이썬은 정규 표현식을 위한 내장 패키지인 re 모듈을 기본 제공합니다. 별도 설치 없이 아래 한 줄만 추가하면 바로 사용할 수 있습니다.

import re

가장 기본적인 매칭 예제

import re
txt = "Use of python in Machine Learning"
x = re.search("^Use.*Learning$", txt)
if x:
    print("YES! We have a match!")
else:
    print("No match")

실행 결과

YES! We have a match!

위 코드는 문자열이 "Use"로 시작하고(^) "Learning"으로 끝나는($)지를 검사하는 예제입니다. 조건에 맞으면 매치 객체가 반환되어 if 문이 참이 됩니다.

2. re 모듈의 주요 함수

re 모듈은 문자열에서 패턴과 일치하는 부분을 찾기 위한 다양한 함수를 제공합니다.

함수설명
findall()일치하는 모든 결과를 리스트로 반환
search()문자열 어디든 일치하는 부분이 있으면 매치 객체를 반환
split()일치하는 지점마다 문자열을 나누어 리스트로 반환
sub()일치하는 하나 이상의 부분을 지정한 문자열로 교체

3. 메타 문자(Metacharacters)

메타 문자는 정규 표현식 안에서 특별한 의미를 가지는 문자들입니다.

문자설명예제
[]문자 집합"[a-m]"
\특수 시퀀스를 알리거나 특수 문자를 이스케이프"\d"
.줄바꿈 문자를 제외한 임의의 한 문자"he..o"
^해당 문자열로 시작"^Hello"
$해당 문자열로 끝남"World$"
*0번 이상 반복"aix*"
+1번 이상 반복"aix+"
{}정확히 지정한 횟수만큼 반복"ai{2}"
|둘 중 하나(또는)"short|long"
()캡처하고 그룹화-

4. 특수 시퀀스(Special Sequences)

특수 시퀀스는 백슬래시(\) 뒤에 아래 문자 중 하나가 붙은 형태로, 역시 특별한 의미를 가집니다.

문자설명예제
\A지정한 문자가 문자열 맨 앞에 있으면 일치"\APyt"
\b지정한 문자가 단어의 시작 또는 끝에 있으면 일치r"\bPython", r"world\b"
\B지정한 문자가 단어의 시작(또는 끝)이 아닌 위치에 있으면 일치r"\BPython", r"World\B"
\d숫자(digit)가 포함되어 있으면 일치"\d"
\D숫자가 아닌 문자가 포함되어 있으면 일치"\D"
\s공백 문자가 포함되어 있으면 일치"\s"
\S공백이 아닌 문자가 포함되어 있으면 일치"\S"
\w영문자(a~z, A~Z), 숫자(0~9), 밑줄(_) 중 하나라도 포함되면 일치"\w"
\W단어 문자가 아닌 것이 포함되어 있으면 일치"\W"
\Z지정한 문자가 문자열 맨 끝에 있으면 일치"world\Z"

참고로 \b처럼 백슬래시가 포함된 패턴은 문자열 앞에 r을 붙인 로우 스트링(raw string)으로 작성하는 것이 좋습니다. 그래야 파이썬의 이스케이프 처리와 충돌하지 않습니다.

5. 셋(Sets)

대괄호 []로 묶인 문자 집합 역시 특별한 의미를 가집니다.

설명
[raj]r, a, j 중 하나라도 포함되면 일치
[a-r]a부터 r 사이의 알파벳 소문자와 일치
[^raj]r, a, j를 제외한 모든 문자와 일치
[0123]0, 1, 2, 3 중 하나라도 포함되면 일치
[0-9]0부터 9 사이의 숫자와 일치
[0-3][0-8]00부터 38 사이의 두 자리 숫자와 일치
[a-zA-Z]a~z 또는 A~Z 사이의 알파벳 문자와 일치
[+]문자열에서 + 문자와 일치

6. findall() 함수 예제

findall() 함수는 일치하는 모든 결과를 리스트로 반환합니다.

# 텍스트에서 "in"과 일치하는 모든 항목을 리스트로 출력
import re
txt = "Use of python in Machine Learning"
x = re.findall("in", txt)
print(x)

실행 결과

['in', 'in', 'in']

결과 리스트에는 발견된 순서대로 모든 일치 항목이 담깁니다. 만약 일치하는 패턴이 하나도 없다면 빈 리스트가 반환됩니다.

x = re.findall("Hello", txt)  # 텍스트에 없는 패턴

실행 결과

[]

7. search() 함수 예제

search() 함수는 문자열 전체를 검색하여 일치하는 부분이 있으면 매치 객체를 반환합니다. 일치하는 부분이 여러 개여도 첫 번째 항목만 반환한다는 점에 유의하세요.

import re
txt = "Python is one of the most popular languages around the world"
searchObj = re.search("\s", txt)
print("첫 번째 공백 문자의 위치:", searchObj.start())

실행 결과

첫 번째 공백 문자의 위치: 6

일치하는 패턴이 없으면 None이 반환됩니다.

8. split() 함수 예제

split() 함수는 일치하는 지점마다 문자열을 잘라 리스트로 반환합니다.

# 공백 문자를 기준으로 문자열 분리
import re
string = "Python is one of the most popular languages around the world"
result = re.split("\s", string)
print(result)

실행 결과

['Python', 'is', 'one', 'of', 'the', 'most', 'popular', 'languages', 'around', 'the', 'world']

9. sub() 함수 예제

sub() 함수는 일치하는 부분을 원하는 텍스트로 교체할 때 사용합니다.

# 문자열의 모든 공백을 밑줄(_)로 교체
import re
string = "Python is one of the most popular language around the world"
result = re.sub("\s", "_", string)
print(result)

실행 결과

Python_is_one_of_the_most_popular_language_around_the_world

10. 매치 객체(Match Object)

매치 객체는 검색 결과와 관련된 정보를 담고 있는 객체입니다. 일치하는 패턴이 없으면 None이 반환됩니다.

import re
string = "Python is one of the most popular language around the world"
searchObj = re.search("on", string)
print(searchObj)

실행 결과

<re.Match object; span=(4, 6), match='on'>

매치 객체는 검색 정보를 조회할 수 있는 속성과 메서드를 제공합니다.

  • .span() – 일치 구간의 시작 위치와 끝 위치를 튜플로 반환
  • .string – 함수에 전달된 원본 문자열을 반환
  • .group() – 실제로 일치한 문자열 부분을 반환

예제 – 대문자 "P"로 시작하는 단어를 찾아 일치한 부분 출력하기

# 대문자 P로 시작하는 단어 검색
import re
string = "Python is one of the most popular language around the world"
searchObj = re.search(r"\bP\w+", string)
print(searchObj.group())

실행 결과

<re.Match object; span=(0, 6), match='Python'>

이처럼 파이썬의 re 모듈만 익혀두면 복잡한 문자열 처리 작업도 몇 줄의 코드로 깔끔하게 해결할 수 있습니다. 메타 문자와 특수 시퀀스를 자유롭게 조합하며 다양한 패턴 매칭을 직접 연습해 보세요.