Python re를 이용한 정규 표현식
Python의 강력한 문자열 처리 도구 중 하나는 바로 정규 표현식(Regular Expression)입니다. 정규 표현식은 특정한 패턴을 가진 문자열을 찾거나, 검증하거나, 변환할 때 유용합니다. Python에서는 re
모듈을 통해 정규 표현식을 사용할 수 있습니다. 이번 포스팅에서는 re
모듈의 주요 기능과 사용법을 예제와 함께 살펴보겠습니다.
1. 정규 표현식의 기본 개념
정규 표현식은 문자열의 특정 패턴을 정의하기 위해 사용됩니다. 예를 들어, 이메일 주소를 검증하거나, 숫자만 추출하거나, 특정 단어로 시작하는 텍스트를 찾을 때 유용합니다.
패턴 | 설명 |
---|---|
. |
임의의 한 문자 (줄바꿈 제외) |
^ |
문자열의 시작 |
$ |
문자열의 끝 |
* |
앞 문자가 0번 이상 반복 |
+ |
앞 문자가 1번 이상 반복 |
? |
앞 문자가 0번 또는 1번 반복 |
{n} |
정확히 n번 반복 |
[abc] |
a , b , c 중 하나 |
[a-z] |
소문자 알파벳 a부터 z까지 중 하나 |
\d |
숫자 (0-9) |
\w |
알파벳, 숫자, 밑줄 (_) |
2. re
모듈의 주요 함수
re
모듈은 다양한 함수들을 제공합니다. 여기서 자주 사용하는 주요 함수들을 살펴보겠습니다.
2.1 re.match()
re.match()
는 문자열의 시작 부분이 패턴과 일치하는지 확인합니다.
import re
pattern = r"hello"
string = "hello world"
match = re.match(pattern, string)
if match:
print("Match found:", match.group())
else:
print("No match")
2.2 re.search()
re.search()
는 문자열 전체에서 패턴과 일치하는 첫 번째 부분을 찾습니다.
import re
pattern = r"world"
string = "hello world"
search = re.search(pattern, string)
if search:
print("Search found:", search.group())
else:
print("No match")
2.3 re.findall()
re.findall()
는 문자열에서 패턴과 일치하는 모든 부분을 리스트로 반환합니다.
import re
pattern = r"\d+"
string = "There are 42 apples and 35 bananas."
numbers = re.findall(pattern, string)
print("Numbers found:", numbers)
2.4 re.sub()
re.sub()
는 패턴과 일치하는 부분을 다른 문자열로 대체합니다.
import re
pattern = r"apples"
replacement = "oranges"
string = "I love apples and apples are great."
result = re.sub(pattern, replacement, string)
print("Result:", result)
2.5 re.split()
re.split()
는 패턴을 기준으로 문자열을 분리합니다.
import re
pattern = r"[ ,]+"
string = "Python, Java, C++, JavaScript"
languages = re.split(pattern, string)
print("Languages:", languages)
3. 정규 표현식의 고급 사용법
정규 표현식은 단순히 일치 여부를 확인하는 것을 넘어, 더 복잡한 문자열 처리를 가능하게 합니다.
3.1 그룹(Group) 사용하기
괄호 ()
를 사용하여 패턴의 특정 부분을 그룹으로 묶을 수 있습니다.
import re
pattern = r"(\d+)-(\d+)-(\d+)"
string = "My birthday is 1990-12-25."
match = re.search(pattern, string)
if match:
print("Year:", match.group(1))
print("Month:", match.group(2))
print("Day:", match.group(3))
3.2 비캡처 그룹 (Non-capturing Group)
(?:...)
를 사용하여 캡처하지 않는 그룹을 만들 수 있습니다.
import re
pattern = r"(?:http|https)://(\w+\.\w+)"
string = "Visit https://example.com for details."
match = re.search(pattern, string)
if match:
print("Domain:", match.group(1))
3.3 Lookahead와 Lookbehind
Lookahead와 Lookbehind를 사용하면 특정 조건을 기준으로 패턴을 정의할 수 있습니다.
Lookahead
import re
pattern = r"\w+(?=:)"
string = "key1:value1, key2:value2"
keys = re.findall(pattern, string)
print("Keys:", keys)
Lookbehind
import re
pattern = r"(?<=\$)\d+"
string = "The price is $100."
price = re.search(pattern, string)
if price:
print("Price:", price.group())
4. 예제: 이메일 검증
다음은 정규 표현식을 이용한 이메일 주소 검증 예제입니다.
import re
def is_valid_email(email):
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
return bool(re.match(pattern, email))
emails = ["test@example.com", "invalid-email", "hello@world"]
for email in emails:
print(f"{email}: {is_valid_email(email)}")
5. 정리
Python의 re
모듈은 문자열 처리를 강력하고 유연하게 해줍니다. 이번 포스팅에서 다룬 주요 내용은 다음과 같습니다:
re.match()
,re.search()
,re.findall()
등 주요 함수 사용법- 그룹과 Lookahead/Lookbehind를 활용한 고급 패턴 작성
- 실제 예제: 이메일 주소 검증
정규 표현식은 처음에는 다소 복잡하게 느껴질 수 있지만, 익숙해지면 문자열 처리에서 강력한 도구가 될 것입니다. 이제 여러분도 다양한 문자열 문제를 정규 표현식으로 해결해보세요!
'Python > Python 심화' 카테고리의 다른 글
Pandas를 이용한 데이터 처리 및 분석 (0) | 2025.07.27 |
---|---|
Python 파일 입출력과 pathlib (0) | 2025.07.26 |
Python `os`, `sys`를 활용한 시스템 관리 (0) | 2025.07.24 |
Python collections 모듈을 이용한 데이터 구조 (0) | 2025.07.23 |
Python `datetime`과 시간 관리 (0) | 2025.07.22 |