1. 정규표현식(Regular Expressions) 개요

  • 특정한 규칙을 가진 문자열의 집합을 표현하는 형식 언어
  • 복잡한 문자열의 검색과 치환에 사용됨
  • 테스트 사이트: https://regexr.com

2. 메타문자 (Meta Characters)

  • 특별한 용도로 사용되는 문자
  • 기호 목록: . ^ $ * + ? { } [ ] \ | ( )
  • []: 대괄호 안의 문자 중 하나와 매치
    • 예: [abc] → a, b, c 중 하나와 매치

3. 대괄호([]) 활용

  • -(하이픈)을 사용해 범위를 지정 가능
    • [a-c][a, b, c]와 동일
    • [0-5][0,1,2,3,4,5]
    • [a-zA-Z] → 모든 알파벳
    • [0-9] → 숫자 전체

4. ^ (캐럿) 메타문자

  • ^: not(부정)의 의미를 가짐
    • [^0-9] → 숫자가 아닌 문자와 매치

5. 자주 사용하는 문자 클래스

표현식의미동일 표현식
\d숫자와 매치[0-9]
\D숫자가 아닌 문자[^0-9]
\s공백 문자[ \t\n\r\f\v]
\S공백이 아닌 문자[^ \t\n\r\f\v]
\w문자 + 숫자[a-zA-Z0-9_]
\W문자 + 숫자가 아닌 문자[^a-zA-Z0-9_]

6. . (Dot)

  • 줄바꿈 문자(\n)를 제외한 모든 문자와 매치
  • 예시
    • 정규식: a.b
    • 매치: aab, a0b
    • 불일치: abc (a와 b 사이에 문자가 없음)

7. * (반복)

  • 바로 앞의 문자가 0회 이상 반복되면 매치
  • 예: a* → a가 0번 이상 반복

8. + (반복)

  • 바로 앞의 문자가 1회 이상 반복되면 매치
  • 예: ca+tcat, caaat 등과 매치

9. {m,n} (반복 횟수 지정)

  • {m,n}: 반복 횟수를 직접 지정
    • {3,} → 3회 이상
    • {,3} → 3회 이하
    • {m} → 정확히 m회

10. ? (선택적 반복)

  • {0,1}과 동일한 기능
  • 예: ab?c → b 문자가 0번 또는 1번 존재

11. Python re 모듈

  • 파이썬에서 정규표현식을 다루기 위한 기본 내장 모듈

  • 기본 사용법

    • import re
    • p = re.compile('ab*')
  • 주요 함수

    • match(): 문자열 시작 부분부터 매치 확인
    • search(): 문자열 전체 검색
    • findall(): 매치되는 모든 문자열을 리스트로 반환
    • finditer(): 매치되는 모든 문자열을 이터레이터로 반환

12. match() 결과 처리

  • 매치되면 match 객체를 반환
  • 매치되지 않으면 None 반환
  • group() 함수를 통해 매치된 문자열 출력 가능

  • match(): 문자열 시작 위치에서만 매치 시도
  • search(): 문자열 전체에서 매치 시도

14. re 컴파일 옵션

옵션의미
DOTALL (S)줄바꿈 문자 포함 모든 문자 매치
IGNORECASE (I)대소문자 구분 없이 매치
MULTILINE (M)여러 줄에서 ^, $ 메타문자 인식
VERBOSE (X)정규식을 보기 쉽게 작성하고 주석 허용

15. re.X (VERBOSE) 옵션

  • 정규식을 여러 줄로 나누고 주석 추가 가능
  • 예시
re.compile(r"""  
 ^python\s\w+  # python으로 시작하고 공백 후 단어가 옴  
""", re.VERBOSE)

16. 백슬래시(\) 처리 주의

  • 정규식 내에서 \s 같은 이스케이프 문자가 해석될 수 있음
  • \\를 사용해 백슬래시 자체를 표현해야 함
  • 문자열 literal 규칙에 따라 \\\로 해석됨
  • 정규식에서 \\section을 찾으려면 \\\\section으로 작성해야 함
  • Python에서 raw string(r"문자열")을 사용하면 \\ 대신 \ 그대로 인식 가능

17. 예시

  • 일반 문자열: "\\section"
  • raw 문자열: r"\section"

raw 문자열을 사용하면 백슬래시 이스케이프 문제 없이 정규표현식 작성 가능

0개의 댓글