파이썬에서의 정규 표현식
정규 표현식(Regular Expression)은 문자열을 처리할 때 매우 강력한 도구입니다. 복잡한 문자열 패턴을 정의하고, 해당 패턴에 맞는 문자열을 찾거나 대체할 수 있습니다. 파이썬에서는 re 모듈을 통해 정규 표현식을 사용합니다.
기본적인 정규 표현식 패턴
.: 모든 단일 문자와 일치
^: 문자열의 시작과 일치
$: 문자열의 끝과 일치
*: 바로 앞의 문자가 0회 이상 반복
+: 바로 앞의 문자가 1회 이상 반복
?: 바로 앞의 문자가 0회 또는 1회 등장
\d: 숫자와 일치
\w: 문자, 숫자, 언더스코어와 일치
\s: 공백 문자(스페이스, 탭 등)와 일치
[abc]: 괄호 안의 문자들 중 하나와 일치 (예: 'a', 'b', 'c')
|: 논리적 'OR' 연산
정규 표현식을 사용하는 함수
- re.search(): 문자열 전체에서 패턴과 일치하는 첫 부분을 찾음
- re.match(): 문자열 시작이 패턴과 일치하는지 확인
- re.findall(): 패턴과 일치하는 모든 부분을 찾음
- re.sub(): 패턴과 일치하는 부분을 다른 문자열로 대체
예시 코드: 이메일 주소 검증
아래 예제에서는 정규 표현식을 사용하여 주어진 문자열이 유효한 이메일 주소인지 검증합니다.
import re
def validate_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if re.match(pattern, email):
return True
return False
# 이메일 주소 검증 예시
email_list = ["user@example.com", "invalid-email@", "another.user@domain.co"]
for email in email_list:
result = "유효한" if validate_email(email) else "유효하지 않은"
print(f"{email}는 {result} 이메일 주소입니다.")
이 코드에서는 이메일 주소가 유효한지 판단하기 위한 정규 표현식 패턴을 정의합니다. 이 패턴은 일반적인 이메일 주소의 형식(사용자 이름, '@' 기호, 도메인 이름, 점, 그리고 최소 두 글자의 국가 코드 또는 범용 도메인)을 검사합니다.
정규 표현식을 사용하면 이처럼 복잡하거나 특정 형식을 갖는 문자열을 효율적으로 처리할 수 있습니다.
정규 표현식에서의 문자열 검색 함수들
1. re.match()
설명: re.match() 함수는 문자열의 시작 부분에서 패턴과 일치하는지를 확인합니다. 일치하는 객체를 반환하거나, 일치하는 것이 없으면 None을 반환합니다.
사용 케이스: 문자열이 특정 패턴으로 시작하는지 검사할 때 사용합니다.
2. re.search()
설명: re.search() 함수는 전체 문자열을 검색하여 패턴과 일치하는 첫 번째 위치를 찾습니다. 일치하는 객체를 반환하거나, 일치하는 것이 없으면 None을 반환합니다.
사용 케이스: 문자열 어디에나 일치하는 패턴이 있는지 찾을 때 사용합니다.
3. re.findall()
설명: re.findall() 함수는 문자열 전체에서 패턴과 일치하는 모든 부분을 찾아 리스트로 반환합니다.
사용 케이스: 패턴과 일치하는 모든 문자열을 추출할 때 사용합니다.
예시 코드
다음 예시에서는 이메일을 찾는 정규 표현식을 사용하여 이 세 가지 함수의 차이를 보여줍니다.
import re
text = "user1@example.com, then user2@example.com, and user3@example.net"
# re.match() 사용
match = re.match(r'\w+@\w+\.\w+', text)
print("Match:", match.group() if match else "No match found")
# re.search() 사용
search = re.search(r'\w+@\w+\.\w+', text)
print("Search:", search.group() if search else "No match found")
# re.findall() 사용
findall = re.findall(r'\w+@\w+\.\w+', text)
print("Find all:", findall)
출력 결과 설명
re.match(): 문자열 시작 부분에서 패턴과 일치하는 부분을 찾으므로, 첫 번째 이메일 주소를 반환합니다.
re.search(): 전체 문자열을 검색하여 첫 번째로 일치하는 부분을 찾습니다. 이 경우에도 첫 번째 이메일 주소를 반환합니다.
re.findall(): 전체 문자열에서 모든 일치하는 부분을 찾아 리스트로 반환합니다. 따라서 모든 이메일 주소들이 리스트 안에 포함됩니다.
이 예시를 통해 각 함수가 어떻게 작동하는지 이해하는 데 도움이 되길 바랍니다!
'파이썬 기초' 카테고리의 다른 글
파이썬 기초 - 타입 어노테이션 (0) | 2023.10.31 |
---|---|
파이썬 - 데코레이터, 이터레이터 (0) | 2023.10.31 |
파이썬 기초 - 클로저 (0) | 2023.10.31 |
파이썬 주의사항 (0) | 2023.10.16 |
파이썬 내장함수 모음 (0) | 2023.10.11 |