파이썬 정규 표현식(re)

2025. 10. 31. 15:36·알고리즘 공부
728x90

복잡한 문자열에서 특정 패턴을 검색, 추출, 치환하는 방법을 배웁니다.

1. re 모듈의 4가지 핵심 함수

import re 가 항상 필요합니다.

  • re.search(패턴, 문자열):
    • 문자열 전체를 검색하여 **첫 번째로 일치하는 객체(Match Object)**를 반환합니다.
    • 일치하는 것이 없으면 None을 반환합니다.
match = re.search(r'\d+', 'My number is 1234 and 5678')
if match:
    print(match.group()) # 출력: '1234' (첫 번째 숫자만)
  • re.findall(패턴, 문자열):
    • 문자열 전체를 검색하여 일치하는 모든 부분을 **리스트(list)**로 반환합니다.
    • 코딩 테스트에서 가장 유용하게 사용됩니다.
numbers = re.findall(r'\d+', 'My number is 1234 and 5678')
# numbers -> ['1234', '5678']
  • re.sub(패턴, 바꿀문자열, 원본문자열):
    • 'substitute'의 약자. 일치하는 모든 패턴을 바꿀문자열로 치환합니다.
s = 'A man, a plan, a canal: Panama'
# [^a-z0-9] (알파벳/숫자가 아닌것)을 '' (빈문자열)로 치환
processed = re.sub(r'[^a-z0-9]', '', s.lower())
# processed -> 'amanaplanacanalpanama'
  • re.split(패턴, 문자열):
    • 패턴에 일치하는 부분을 **구분자(delimiter)**로 삼아 문자열을 쪼개어 리스트로 반환합니다.
text = 'apple,banana;orange|kiwi'
# 쉼표, 세미콜론, 파이프 기호를 모두 구분자로 사용
fruits = re.split(r'[,;|]', text)
# fruits -> ['apple', 'banana', 'orange', 'kiwi']

2. 코딩 테스트 필수 패턴 (메타 문자)

함수를 알았으니 이제 '패턴'을 만드는 문법을 알아야 합니다.

[] (문자 집합): "이 중 하나!"

  • [abc] : 'a' 또는 'b' 또는 'c'
  • [a-z] : 'a'부터 'z'까지 모든 소문자
  • [a-zA-Z0-9] : 모든 알파벳 대소문자 + 모든 숫자 (가장 많이 씀)
  • [^abc] : ^가 [] 안에 있으면 부정(NOT). 'a', 'b', 'c'를 제외한 모든 문자.
  • [^a-z0-9] : 알파벳과 숫자를 제외한 모든 문자 (공백, 구두점 등)

\ (특수 시퀀스): "자주 쓰는 약어!"

  • \d : 숫자(Digit) 1개. [0-9]와 동일.
  • \D : 숫자가 아닌(Non-Digit) 문자 1개. [^0-9]와 동일.
  • \w : 단어(Word) 문자 1개. [a-zA-Z0-9_] (알파벳, 숫자, 언더스코어)와 동일.
  • \W : 단어 문자가 아닌(Non-Word) 문자 1개. [^a-zA-Z0-9_]와 동일.
  • \s : 공백(Space) 문자 1개. (스페이스, 탭, 줄바꿈 등)
  • \S : 공백이 아닌(Non-Space) 문자 1개.

* + ? (수량자): "몇 개?"

  • + (1개 이상):
    • \d+ -> 숫자가 1개 이상 연속된 것 (예: '1', '123', '99999')
    • 코딩 테스트에서 re.findall(r'\d+', ...)로 문자열에서 숫자만 뽑아낼 때 가장 많이 씁니다.
  • * (0개 이상):
    • ab*c -> 'ac', 'abc', 'abbbc' (b가 0개 이상)
  • ? (0개 또는 1개):
    • ab?c -> 'ac', 'abc' (b가 0개 또는 1개)

3. r'' (Raw String)의 중요성

정규식 패턴을 파이썬 문자열로 쓸 때는 반드시 앞에 r을 붙여야 합니다. r'...' (Raw String의 약자)

  • 이유: 파이썬은 '\n'을 '줄바꿈'으로, '\t'를 '탭'으로 해석합니다. 하지만 정규식에서 \d, \w의 \는 '특수 시퀀스'라는 고유의 의미가 있죠.
  • **r''**은 파이썬에게 "이 안에 있는 \는 파이썬 문법이 아니라 그냥 날것(raw) 그대로의 문자로 취급해!"라고 알려주는 역할을 합니다.
  • 잘못된 예: re.sub('\w', ...) (X)
  • 올바른 예: re.sub(r'\w', ...) (O)
728x90
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 공부' 카테고리의 다른 글

파이썬 컴프리핸션(Comprehension)  (0) 2025.10.31
C++ vscode에서 백준 알고리즘 풀이 셋팅  (1) 2025.04.05
[Condingame] DWARFS STANDING ON THE SHOULDERS OF GIANTSUTER(트리 자료구조의 높이 구하기 - 그래프, 재귀)  (1) 2023.05.15
'알고리즘 공부' 카테고리의 다른 글
  • 파이썬 컴프리핸션(Comprehension)
  • C++ vscode에서 백준 알고리즘 풀이 셋팅
  • [Condingame] DWARFS STANDING ON THE SHOULDERS OF GIANTSUTER(트리 자료구조의 높이 구하기 - 그래프, 재귀)
같은편
같은편
책을 통해 이때까지 블로그나 유튜브에서 얻었던 지식의 파편들을 정립하고 합쳐 단단한 발판으로 만들기 위한 블로그
  • 같은편
    홍익대 게임소프트웨어전공의 프로그래밍 단련 공간
    같은편
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • 게임 프로그래밍 패턴 (2)
      • C# 프로그래밍 (26)
      • C++ 프로그래밍 (32)
        • 함수 (8)
        • 클래스 (22)
      • 알고리즘 공부 (29)
        • 백준 사이트 문제 (14)
        • codingame 사이트 문제 (11)
      • 유니티엔진 - 게임 공부 (3)
      • 언리얼엔진 - 게임 공부 (4)
      • 쓸모 있을 수 있는 팁 (2)
      • 일상이야기 (3)
  • 링크

    • 깃허브
  • 인기 글

  • 태그

    task
    예외 처리
    탐욕 알고리즘
    queue
    언리얼엔진4
    비동기
    객체
    함수
    스레드
    언리얼
    알고리즘
    복사 생성자
    클래스
    c++
    람다식
    DFS
    언리얼엔진
    C#
    문제 풀이
    최단 경로
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
같은편
파이썬 정규 표현식(re)
상단으로

티스토리툴바