AI 부트캠프/챕터3(11.08~12.04)

TIL 47

musukie 2024. 11. 23. 23:37

강의 외부에서 추가로 알게 된 내용

re.sub() 함수

정규 표현식을 사용해 문자열에서 특정 패턴을 찾아 원하는 값으로 대체하는 데 사용된다. 문법은 아래와 같다.

re.sub(pattern, replacement, string, count=0, flags=0)
  • pattern: 찾고자 하는 정규 표현식(패턴).
  • replacement: 대체할 문자열 또는 함수.
  • string: 패턴을 찾을 대상 문자열.
  • count: 대체할 횟수(기본값은 0으로, 제한 없음).
  • flags: 정규식 플래그로, 대소문자 구분 등 옵션을 지정.

예시를 통해 자세히 알아보자.

예시 1) 단순한 문자열 대체

문자열에서 숫자를 공백으로 대체하는 예시다.

import re

text = "딥러닝의 발전은 2010년대부터 시작되었습니다."
result = re.sub(r'\d', '', text)

print(result)

출력하면 아래와 같다.

# 출력
딥러닝의 발전은 년대부터 시작되었습니다.

이 코드의 동작 과정은 아래와 같다.

  • r'\d': 정규 표현식으로 숫자(0-9)를 찾는다.
  • '': 숫자를 빈 문자열로 대체(즉, 제거)한다.
  • re.sub(r'\d', '', text)는 문자열에서 모든 숫자를 제거한다.

예시 2) 복잡한 패턴 대체

특정 형식의 이메일 주소를 "이메일"로 대체하는 예시다.

text = "문의사항이 있으면 hello@domain.com으로 연락해주세요."
result = re.sub(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', '이메일', text)

print(result)

출력하면 아래와 같다.

문의사항이 있으면 이메일으로 연락해주세요.

이 코드의 동작 원리는 아래와 같다.

 

  • r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}': 이메일 주소를 나타내는 정규식이다.
    • [a-zA-Z0-9._%+-]+: 이메일의 사용자 이름 부분.
    • @: '@' 기호.
    • [a-zA-Z0-9.-]+: 도메인 이름.
    • \.[a-zA-Z]{2,}: .com, .net 같은 도메인 끝부분.
  • re.sub는 이 패턴에 해당하는 이메일 주소를 "이메일"로 대체다.

 

 

예시 3) 함수로 대체

패턴을 찾은 결과에 따라 동적으로 대체한다. 예를 들어, 아래 코드는 숫자를 찾아 두 배로 만드는 코드다.

def double_number(match):
    return str(int(match.group()) * 2)

text = "The price is 50 dollars and the discount is 20 dollars."
result = re.sub(r'\d+', double_number, text)

print(result)

출력하면 아래와 같다.

The price is 100 dollars and the discount is 40 dollars.

이 코드의 동작 원리는 아래와 같다.

 

  • r'\d+': 연속된 숫자를 찾는다.
  • double_number(match): 매칭된 숫자를 두 배로 계산한 결과를 반환한다.
    • match.group(): 매칭된 텍스트를 가져온다.
  • re.sub(r'\d+', double_number, text)는 모든 숫자를 두 배로 바꾼다.

 

re.sub는 텍스트에서 특정 패턴을 찾아 대체하거나 삭제할 때 유용하다. 단순한 대체는 문자열(replacement)로 처리하고, 복잡한 대체는 함수로 처리한다. 정규 표현식 패턴과 대체 방식을 잘 이해하면 텍스트 전처리 작업을 효과적으로 수행할 수 있다.

 

 

'AI 부트캠프 > 챕터3(11.08~12.04)' 카테고리의 다른 글

TIL 48  (0) 2024.11.25
WIL 7  (0) 2024.11.22
TIL 46 팀 프로젝트  (1) 2024.11.22
TIL 45  (0) 2024.11.21
TIL 44  (1) 2024.11.20