🧩 Python 정규표현식(Regex) 정리 예제
re 모듈을 활용한 정규식 패턴 매칭
🔹 1️⃣ 기본 패턴 매칭 (match vs search)
import re
L = ['ab123', 'cd456', 'xy789', '12ef345qw', 'abc12']
# [패턴 설명]
# ^ → 문자열의 시작
# [a-zA-Z]{2} → 알파벳 2개
# \d{3} → 숫자 3개
# $ → 문자열의 끝
regex = '^[a-zA-Z]{2}\\d{3}$'
pattern = re.compile(regex)
print("="*10, "match", "="*10)
# match(): 문자열의 처음부터 패턴이 일치해야 매치됨
for item in L:
if pattern.match(item):
print(f"패턴 일치: {item}")
else:
print(f"패턴 불일치: {item}")
print("="*10, "search", "="*10)
# search(): 문자열 전체 중 패턴이 포함되면 매치됨
for item in L:
if pattern.search(item):
print(f"패턴 일치: {item}")
else:
print(f"패턴 불일치: {item}")
========== match ==========
패턴 일치: ab123
패턴 일치: cd456
패턴 일치: xy789
패턴 불일치: 12ef345qw
패턴 불일치: abc12
========== search ==========
패턴 일치: ab123
패턴 일치: cd456
패턴 일치: xy789
패턴 불일치: 12ef345qw
패턴 불일치: abc12
🔹 2️⃣ 숫자 3개 이상 포함된 파일명 찾기
L = ['a.txt', 'a12.txt', 'a123.txt', 'a12345.txt']
regex = '^[a]\\d{3,}\\.txt$' # a + 숫자 3개 이상 + .txt
pattern = re.compile(regex)
print("="*10, "a 숫자 3개 이상인 .txt", "="*10)
for item in L:
if pattern.search(item):
print(f"패턴 일치: {item}")
else:
print(f"패턴 불일치: {item}")
패턴 불일치: a.txt
패턴 불일치: a12.txt
패턴 일치: a123.txt
패턴 일치: a12345.txt
🔹 3️⃣ 한글만으로 구성된 문자열 찾기 (fullmatch)
L = ['hello!', 'hello안녕~', '하하하', '안녕^^', '반갑습니다.', '또 만나요', '파이썬', 'grape#*']
regex = '^[가-힣]+$'
# re.fullmatch(): 전체 문자열이 정확히 패턴과 일치해야 함
result = [word for word in L if re.fullmatch(regex, word)]
print(result)
['하하하', '파이썬']
🔹 4️⃣ findall / sub로 문자열 처리
print(re.findall('[가-힣]+', '안녕123 하세요!!! hello~~~'))
print(re.sub('\\s+', ' ', ' 안녕 하세옹~~~ 까꿍 '))
출력 결과
['안녕', '하세요']
안녕 하세옹~~~ 까꿍
🔹 5️⃣ 이메일 아이디 / 도메인 분리
mailList = ['abc@naver.com', 'xya@daum.net', 'qwer@google.com']
userList = []
for mail in mailList:
user, domain = re.split("@", mail)
userList.append(f"아이디:{user}, 도메인:{domain}")
for info in userList:
print(info)
아이디:abc, 도메인:naver.com
아이디:xya, 도메인:daum.net
아이디:qwer, 도메인:google.com
🔹 6️⃣ 그룹핑 (이름, 나이 추출)
text = '홍길동, 30세'
pattern = re.compile('(.+),\\s(\\d+)세')
match = pattern.fullmatch(text)
if match:
print(f"이름 : {match.group(1)}")
print(f"나이 : {match.group(2)}")
이름 : 홍길동
나이 : 30
🔹 7️⃣ 주소 패턴 추출 (시/구/동/번지)
address = "서울특별시 강남구 역삼동 123-45"
pattern = re.compile(r'(.+시)\s(.+구)\s(.+동)\s(\d{3}-\d{2})')
match = pattern.fullmatch(address)
if match:
print(f"{match.group(0)}")
print(f"시 : {match.group(1)}")
print(f"구 : {match.group(2)}")
print(f"동 : {match.group(3)}")
print(f"번지: {match.group(4)}")
서울특별시 강남구 역삼동 123-45
시 : 서울특별시
구 : 강남구
동 : 역삼동
번지: 123-45
🔹 8️⃣ 날짜 패턴 추출
text = "오늘은 2025-10-23 입니다."
pattern = re.compile(r'(.+)\s(\d{4})-(\d{1,2})-(\d{1,2})\s(.+)')
match = pattern.search(text)
if match:
today = match.group(1)
year = match.group(2)
month = match.group(3)
day = match.group(4)
string = match.group(5)
print(f"{today} {year}년 {month}월 {day}일 {string}")
오늘은 2025년 10월 23일 입니다.
🔹 9️⃣ 파일 내용에서 이름별 합계 계산
전지현 80 90 83
김혜수 60 57 57
공유 100 88 89
fr = open("a.txt", encoding="utf-8", mode="r")
lines = fr.readlines()
for line in lines:
pattern = re.compile(r'(.+)\s(\d{2})\s(\d{0,})\s(\d{0,})')
match = pattern.search(line.strip())
if match:
sum1 = int(match.group(2))
sum2 = int(match.group(3))
sum3 = int(match.group(4))
total = sum1 + sum2 + sum3
print(f"{match.group(1)} - 합계 : {total}")
전지현 - 합계 : 253
김혜수 - 합계 : 174
공유 - 합계 : 277
정리
| 함수 | 설명 |
| match() | 문자열 시작부터 패턴이 일치해야 매치 |
| search() | 문자열 전체 중 한 곳이라도 일치하면 매치 |
| fullmatch() | 문자열 전체가 정확히 일치해야 매치 |
| findall() | 일치하는 모든 문자열을 리스트로 반환 |
| sub() | 일치하는 패턴을 치환(replace) |
| split() | 패턴 기준으로 문자열 분리 |
| group(n) | 그룹핑된 n번째 그룹 추출 |
'기초 및 언어 > ▶ python' 카테고리의 다른 글
| 24_Python_Pandas (0) | 2025.11.03 |
|---|---|
| 23_Python_NumPy (0) | 2025.10.31 |
| Jinja 템플릿 엔진 (0) | 2023.12.18 |
| FastAPI 가이드:고성능 비동기 API 서버 구축의 모든 것 (0) | 2023.12.16 |
| 21_Python 파이썬 동기/비동기 (0) | 2023.12.13 |