언어·프레임워크/Python

[Python] 정규 표현식 (Regular Expression)

DandyNow 2025. 4. 25. 09:48
728x90
반응형

정규 표현식 (Regular Expression)

Python에서 이 정도는 기본적으로 알아야하는 정규 표현식이라고 생각해 정리해 보았다.

1. 기본 메타 문자 (Meta Characters)

  • .: 임의의 한 문자 (개행 문자 제외)
  • ^: 문자열의 시작
  • $: 문자열의 끝
  • *: 앞의 문자가 0번 이상 반복
  • +: 앞의 문자가 1번 이상 반복
  • ?: 앞의 문자가 0번 또는 1번 나타남
  • []: 문자 집합. [abc]는 a, b, c 중 하나를 의미
  • [^]: 부정 문자 집합. [^abc]는 a, b, c를 제외한 나머지 문자 중 하나를 의미
  • |: OR 연산. a|b는 a 또는 b를 의미
  • (): 그룹. 매칭된 부분을 캡처하여 나중에 사용 가능
  • \: 이스케이프 문자. 메타 문자를 리터럴 문자로 사용하기 위해 (예: \.은 점 문자를 의미)

2. 특수 시퀀스 (Special Sequences)

  • \d: 숫자 (digit). [0-9]와 동일
  • \D: 숫자가 아닌 문자. [^0-9]와 동일
  • \w: 단어 문자 (word character). [a-zA-Z0-9_]와 동일
  • \W: 단어 문자가 아닌 문자. [^a-zA-Z0-9_]와 동일
  • \s: 공백 문자 (space character). [ \t\n\r\f\v]와 동일
  • \S: 공백 문자가 아닌 문자. [^ \t\n\r\f\v]와 동일

3. 수량자 (Quantifiers)

  • {n}: 앞의 문자가 정확히 n번 반복
  • {n,}: 앞의 문자가 n번 이상 반복
  • {n,m}: 앞의 문자가 n번 이상 m번 이하 반복

4. 정규 표현식 플래그 (Flags)

  • re.IGNORECASE 또는 re.I: 대소문자를 구별하지 않음
  • re.MULTILINE 또는 re.M: 여러 줄 문자열에서 ^$이 각 줄의 시작과 끝에 매칭됨
  • re.DOTALL 또는 re.S: .이 개행 문자(\n)와도 매칭됨

5. re 모듈 함수

  • re.search(pattern, string): 문자열에서 패턴과 일치하는 첫 번째 부분을 찾음. Match 객체 반환
  • re.match(pattern, string): 문자열의 시작부터 패턴과 일치하는지 확인. Match 객체 반환
  • re.findall(pattern, string): 문자열에서 패턴과 일치하는 모든 부분을 리스트로 반환
  • re.finditer(pattern, string): 문자열에서 패턴과 일치하는 모든 부분을 이터레이터로 반환
  • re.sub(pattern, replacement, string): 문자열에서 패턴과 일치하는 부분을 replacement로 대체

6. 예제 코드로 보는 정규 표현식 상세 분석

  1. \d+

    match = re.search(r'\d+', "123")
    • \d+: 숫자가 1번 이상 반복됨
    • 전체적으로, 이 정규 표현식은 문자열에서 1개 이상의 연속된 숫자를 찾는다. prob_text에서 첫 번째로 나타나는 정수를 추출하는 데 사용된다.
  2. -?\d+

    match = re.search(r'-?\d+', "-123")
    • -?: - 문자가 0번 또는 1번 나타남 (음수 부호 선택적)
    • \d+: 숫자가 1번 이상 반복됨
    • 전체적으로, 이 정규 표현식은 문자열에서 음수 부호가 있을 수도 있는 정수 형태의 숫자를 찾는다. temp_text_combined에서 첫 번째로 나타나는 정수를 추출하는 데 사용된다.
  3. \d+\.?\d*

    match = re.search(r'\d+\.?\d*', "1.23")
    • \d+: 숫자가 1번 이상 반복됨
    • \.?: . 문자가 0번 또는 1번 나타남 (소수점 선택적)
    • \d*: 숫자가 0번 이상 반복됨
    • 전체적으로, 이 정규 표현식은 소수점을 포함할 수도 있는 숫자를 찾는다. pcp_text에서 첫 번째로 나타나는 소수 또는 정수를 추출하는 데 사용된다.

7. 그룹 캡처

  • ()를 사용하여 정규 표현식의 일부를 그룹으로 묶을 수 있다.
  • match.group(0)은 전체 매칭된 문자열을 반환한다.
  • match.group(1)은 첫 번째 그룹에 매칭된 문자열을 반환한다.
  • match.group(2)는 두 번째 그룹에 매칭된 문자열을 반환한다.
  • ...
import re

match = re.search(r"(\d+)[.](d*)", "123.45")

print(match.group())   # 전체 일치: '123.45'
print(match.group(0))  # 전체 일치: '123.45'
print(match.group(1))  # 첫 번째 그룹 (d+): '123'
print(match.group(2))  # 두 번째 그룹 (d*): '45'

8. 추가 학습 자료

728x90
반응형