1. 정규 표현식의 기본 개념
1.1 정규 표현식이란 무엇인가
정규 표현식(Regular Expression)은 특정한 규칙을 가진 문자열을 검색하거나, 일치 여부를 판단하는 데 사용되는 패턴입니다. 복잡한 문자열 검색, 치환, 추출 작업을 매우 간단하게 처리할 수 있습니다.
1.2 정규 표현식을 사용하는 이유
정규 표현식은 다음과 같은 작업에 유용합니다:
- 텍스트에서 패턴에 맞는 특정 데이터 추출 (예: 이메일 주소, 전화번호)
- 입력된 데이터의 유효성 검사 (예: 비밀번호 규칙, 이메일 형식 검증)
- 문자열에서 특정 패턴 치환 및 제거
1.3 re 모듈 소개
Python에서 정규 표현식을 다루기 위해 re
모듈을 사용합니다.
import re
1.4 기본 패턴과 메타 문자
정규 표현식은 일반적인 문자와 특별한 의미를 가지는 메타 문자로 구성됩니다.
.
: 임의의 한 문자와 일치 (개행 문자를 제외한 모든 문자)^
: 문자열의 시작을 의미$
: 문자열의 끝을 의미*
: 앞에 있는 문자가 0번 이상 반복+
: 앞에 있는 문자가 1번 이상 반복?
: 앞에 있는 문자가 0번 또는 1번 나타남[]
: 문자 집합
pattern = r"\d+" # 숫자가 1개 이상 나타나는 패턴
text = "I have 2 apples and 10 oranges."
matches = re.findall(pattern, text)
print(matches) # 출력: ['2', '10']
2. 정규 표현식 메서드
2.1 re.match()
와 re.search()
의 차이점
re.match()
: 문자열의 시작 부분에서 패턴과 일치하는지 확인합니다.
result = re.match(r"\d+", "123abc")
print(result.group()) # 출력: 123
re.search()
: 문자열 전체에서 패턴을 검색하고, 첫 번째로 일치하는 결과를 반환합니다.
result = re.search(r"\d+", "abc123def")
print(result.group()) # 출력: 123
2.2 re.findall()
과 re.finditer()
를 사용한 문자열 검색
re.findall()
: 문자열에서 패턴과 일치하는 모든 부분을 리스트로 반환합니다.
pattern = r"\d+"
text = "There are 12 cats and 9 dogs."
result = re.findall(pattern, text)
print(result) # 출력: ['12', '9']
re.finditer()
: 일치하는 모든 부분을 찾아 이터레이터 객체를 반환하며, 각 결과의 위치 정보도 함께 제공합니다.
result = re.finditer(r"\d+", text)
for match in result:
print(match.group(), match.start(), match.end())
# 출력:
# 12 10 12
# 9 21 22
2.3 re.sub()
로 문자열 치환
re.sub()
는 패턴과 일치하는 부분을 새로운 문자열로 치환합니다.
text = "My phone number is 123-456-7890."
pattern = r"\d{3}-\d{3}-\d{4}" # 전화번호 패턴
new_text = re.sub(pattern, "XXX-XXX-XXXX", text)
print(new_text) # 출력: My phone number is XXX-XXX-XXXX.
2.4 실전 예제: 이메일 주소와 전화번호 검증
email = "user@example.com"
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
is_valid = re.match(pattern, email)
print("Valid email" if is_valid else "Invalid email")
phone = "123-456-7890"
pattern = r"\d{3}-\d{3}-\d{4}"
is_valid = re.match(pattern, phone)
print("Valid phone" if is_valid else "Invalid phone")
3. 정규 표현식을 활용한 프로그램
3.1 간단한 텍스트 필터링 프로그램 만들기 (특정 단어 필터링)
다음 프로그램은 텍스트에서 특정 단어를 필터링하여 제거합니다.
def filter_words(text, words_to_filter):
pattern = "|".join(words_to_filter) # 필터링할 단어들
return re.sub(pattern, "[FILTERED]", text)
text = "This is a bad word example."
filtered_text = filter_words(text, ["bad", "word"])
print(filtered_text) # 출력: This is a [FILTERED] [FILTERED] example.
3.2 정규 표현식을 사용한 데이터 유효성 검사 (우편번호, IP 주소)
우편번호 유효성 검사:
postal_code = "12345"
pattern = r"\d{5}"
is_valid = re.match(pattern, postal_code)
print("Valid postal code" if is_valid else "Invalid postal code")
IP 주소 유효성 검사:
ip_address = "192.168.1.1"
pattern = r"(\d{1,3}\.){3}\d{1,3}"
is_valid = re.match(pattern, ip_address)
print("Valid IP" if is_valid else "Invalid IP")
'python' 카테고리의 다른 글
15편 Python 기초 문법: 외부 라이브러리 사용하기 (0) | 2024.11.19 |
---|---|
14편 Python 기초 문법: 날짜와 시간 다루기 (0) | 2024.11.18 |
12편 Python 기초 문법: 오류 및 디버깅 (0) | 2024.11.16 |
11편 Python 기초 문법: 파일 및 디렉토리 다루기 (1) | 2024.11.15 |
10편 Python 기초 문법: 내장 함수와 람다 함수 (0) | 2024.11.14 |