강의 외부에서 추가로 알게 된 내용
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 |