Dandy Now!
  • [Python] 정규 표현식 (Regular Expression)
    2025년 04월 25일 09시 48분 41초에 업로드 된 글입니다.
    작성자: DandyNow
    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
    반응형
    댓글