정규 표현식(Regular Expression)

2025. 1. 13.·언어/Python

정규 표현식(Regular Expression)

문자열을 패턴에 따라 검색하거나 치환, 추출 등을 할 때 사용

------🐢

re 모듈

파이썬에서 정규 표현식을 사용하려면 re 모듈을 임포트해야 됨

import re

pattern = r"abc"
text = "abcdef"

match_obj = re.search(pattern, text)
if match_obj:
    print("찾았다!", match_obj.group())  # 'abc'

pattern: 정규 표현식 패턴 문자열 (Raw string r"..."으로 쓰는 것을 권장)

text: 실제 검사 대상 문자열

re.search(): 텍스트 전체를 검색하여, 첫 번째로 일치하는 구간(매치)을 찾음

-----🐢-

정규 표현식 기초 문법

메타 문자(Metacharacters)

. (dot): 임의의 한 문자(개행 제외)

^: 문자열 시작 위치(또는 각 라인 시작, re.MULTILINE 옵션 시)

$: 문자열 끝 위치(또는 각 라인 끝, re.MULTILINE 옵션 시)

*: 바로 앞 패턴이 0번 이상 반복

+: 바로 앞 패턴이 1번 이상 반복

?: 바로 앞 패턴이 0번 또는 1번

{m,n}: 바로 앞 패턴이 m번 이상, n번 이하 반복

[...]: 대괄호 안에 있는 문자 중 하나와 매치(문자 클래스)

|: or (분기)

(): 그룹(Group) 을 만들거나, 캡처 그룹으로 묶음

>>> 예시

ab* → 'a' 뒤에 'b'가 0번 이상: "a", "ab", "abb", "abbbb", ...

[0-9]+ → 숫자(0~9)가 1개 이상 연속

(abc|xyz) → 'abc' 또는 'xyz'

 

특수 시퀀스

\d: 숫자 (digit) = [0-9]

\D: 숫자가 아닌 문자 = [^0-9]

\s: 공백 문자(스페이스, 탭 등)

\S: 공백이 아닌 문자

\w: 문자 + 숫자 + _ → [a-zA-Z0-9_]

\W: \w가 아닌 문자

\b: 단어 경계(Word boundary)

\B: 단어 경계가 아닌 곳

----🐢--

re 모듈 주요 함수

re.match(pattern, string)

문자열의 시작 부분이 패턴과 매치되는지 검사

일치하면 매치 객체(Match object) 반환, 없으면 None

m = re.match(r"\d+", "1234abcd")
if m:
    print(m.group())  # '1234'

 

re.search(pattern, string)

문자열 전체를 검색해서 첫 번째로 매치되는 부분을 찾음

일치하면 매치 객체 반환, 없으면 None

s = re.search(r"[A-Z]+", "abcDEFghi")
if s:
    print(s.group())  # 'DEF' (첫 매치)

 

re.findall(pattern, string)

매치되는 모든 부분을 찾아 리스트로 반환

그룹이 사용되면, 각 매치마다 그룹의 튜플을 반환할 수도 있음

results = re.findall(r"\d+", "12 cats, 3 dogs, 45 birds")
print(results)  # ['12', '3', '45']

 

re.finditer(pattern, string)

매치되는 모든 부분에 대한 매치 객체 이터레이터를 반환

매치 객체로부터 위치(.start(), .end()) 등을 얻을 수 있음

it = re.finditer(r"[a-zA-Z]+", "Hello123 World456")
for match in it:
    print(match.group(), match.start(), match.end())
# 'Hello' 0 5
# 'World' 9 14

 

re.sub(pattern, repl, string)

패턴에 매치되는 부분을 repl로 치환(substitute)하여 반환

예: 전화번호나 이메일을 마스킹할 때 유용

text = "My phone number is 010-1234-5678"
masked = re.sub(r"\d", "*", text)
print(masked)  
# "My phone number is ***-****-****"

 

re.split(pattern, string)

패턴을 기준으로 문자열을 분할하여 리스트를 반환

parts = re.split(r"[,;]", "apple,banana;orange")
print(parts)  # ['apple', 'banana', 'orange']

---🐢---

매치 객체(Match object)

매치에 성공하면 함수(search, match, 등)에서 Match 객체가 반환

주요 메서드/속성

.group(): 매치된 전체 문자열

.group(n): n번째 캡처 그룹에 해당하는 문자열

.start(), .end(): 매치된 문자열의 시작/끝 인덱스

.span(): (start, end) 튜플

text = "abc123xyz"
m = re.search(r"(\d+)", text)
if m:
    print(m.group())    # '123'
    print(m.group(1))   # '123' (1번 그룹)
    print(m.start(1))   # 3
    print(m.end(1))     # 6
    print(m.span())     # (3, 6)

--🐢----

정규 표현식 옵션

re.IGNORECASE 또는 re.I: 대소문자 구분 없이 매치

re.MULTILINE 또는 re.M: ^, $를 각 라인의 시작, 끝으로 인식

re.DOTALL 또는 re.S: .이 개행 문자까지 포함하도록

re.VERBOSE 또는 re.X: 패턴 내에 공백, 주석을 허용해 가독성 높임

import re

pattern = r"""  # 여러 줄로 정규식 작성
    ^[A-Za-z]+   # 맨 앞에 알파벳 1개 이상
    \d*$         # 그 뒤에는 숫자 0개 이상, 그리고 끝
"""
compiled = re.compile(pattern, re.VERBOSE | re.IGNORECASE)

m = compiled.match("User1234")
if m:
    print("매치됨!")
저작자표시 비영리 변경금지 (새창열림)

'언어 > Python' 카테고리의 다른 글

파이썬 타입 어노테이션  (0) 2025.01.11
이터레이터/제너레이터  (0) 2025.01.10
클로저/데코레이터  (1) 2025.01.09
유니코드 문자열  (1) 2025.01.08
Threading 모듈  (0) 2025.01.07
'언어/Python' 카테고리의 다른 글
  • 파이썬 타입 어노테이션
  • 이터레이터/제너레이터
  • 클로저/데코레이터
  • 유니코드 문자열
우는거북이
우는거북이
  • 우는거북이
    거북이는 울고 있다
    우는거북이
  • 전체
    오늘
    어제
    • 알아보기 (75) N
      • AI (4)
      • 언어 (16)
        • Python (15)
        • C언어 (1)
      • 알고리즘 (7)
      • 백준 (22)
      • 자료구조 (10)
      • 컴퓨터네트워크 (6)
      • 운영체제 (1)
      • 데이터통신 (9) N
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
우는거북이
정규 표현식(Regular Expression)
상단으로

티스토리툴바