728x90

정규표현식(Regex)은 텍스트에서 패턴을 찾아내는 강력한 도구입니다. Python의 re 모듈은 정규표현식을 기반으로 복잡한 문자열 검색, 치환, 검증 등을 효율적으로 처리합니다. 실무에서 실전 바로 써먹을 수 있는 패턴 설계 노하우를 중심으로, 초보부터 전문가까지 모두에게 도움이 되는 내용을 제공합니다.
1. re 모듈 소개 및 설치 필요 없음
Python 표준 라이브러리의 일부로 별도 설치 없이 사용할 수 있습니다.
import re
2. 기본 사용법: 검색, 일치, 추출
pattern = r"\d+" # 하나 이상의 숫자
text = "주소는 123번지입니다."
match = re.search(pattern, text)
if match:
print(match.group()) # '123'
3. 주요 함수 비교
| 함수 | 기능 | 설명 |
|---|---|---|
| re.match() | 문자열 시작부터 검사 | line = "abc123" → re.match(r"\d+",line)는 None |
| re.search() | 문자열 어디서든 검색 | 위 예제는 '123' 찾아냄 |
| re.findall() | 모든 일치 패턴 리스트 반환 | re.findall(r"\d+", "1a2b3") → ['1','2','3'] |
| re.sub() | 치환 | re.sub(r"\d+", "#", "abc123def") → "abc#def" |
| re.split() | 패턴 기준 분리 | re.split(r"\s+", "a b c") → ['a','b','c'] |
4. 자주 쓰는 메타문자 & 패턴
\d: 숫자,\w: 단어 문자,\s: 공백^: 시작,$: 끝?,*,+,{m,n}: 반복[abc],(a|b): 그룹/선택- 예: r"^[A-Za-z0-9\_]+@[\w\.-]+\.[A-Za-z]{2,}$"
5. 예제: 이메일 유효성 검사
import re
pattern = r"^[\w\.-]+@[\w\.-]+\.\w{2,}$"
def is_email(s):
return bool(re.match(pattern, s))
print(is_email("user@example.com")) # True
print(is_email("invalid-email@")) # False
6. URL 추출 예제
text = "Visit https://example.com or http://test.org"
urls = re.findall(r"https?://[^\s]+", text)
print(urls) # ['https://example.com', 'http://test.org']
7. 그룹 활용: 캡처와 참조
date = "2025-07-20"
m = re.match(r"(\d{4})-(\d{2})-(\d{2})", date)
if m:
year, month, day = m.groups()
print(year, month, day)
8. 컴파일 옵션으로 효율성 & 가독성
pat = re.compile(r"""
^(?P\w+) # 사용자 이름
@
(?P[\w\.-]+) # 도메인
\.(?P\w{2,})$ # 최상위 도메인
""", re.VERBOSE)
m = pat.match("alice@example.com")
print(m.groupdict())
9. 성능 고려: 사전 컴파일 & 적절한 anchoring
- re.compile() 선사용 권장
- '^'나 '$'로 범위를 좁히면 속도 개선
- non-greedy 반복(
+?,*?)은 긴텍스트에서 성능 향상
10. 유니코드 & 한글 처리
text = "서울특별시 12345"
m = re.search(r"[가-힣]+", text)
print(m.group()) # '서울특별시'
11. 정규표현식 사용 시 주의사항
- 복잡한 패턴은 가독성이 저하됨
- 테스트 커버리지를 확보하고, 다양한 입력에 대해 유효성 검사
- 잘못된 패턴은 보안 문제(YARA, ReDoS) 발생 가능
12. 도구와 디버깅 방법
- 정규식 디버거: regex101.com, RegExr
- Python 코드에서
print(match.span())등으로 위치 디버그 re.error예외로 잘못된 패턴 식별
13. 정리 비교표
| 목적 | 추천 방법 | 예시 |
|---|---|---|
| 숫자 추출 | re.findall() | r"\d+" |
| 이메일 검사 | re.match() | r"^\w+@[\w\.-]+\.\w{2,}$" |
| URL 추출 | re.findall() | r"https?://[^\s]+"} |
| 날짜 캡처 | re.match() | r"(\d{4})-(\d{2})-(\d{2})" |
14. 결론: 정규표현식은 텍스트 다루기의 필수 도구
Python의 정규표현식은 복잡한 패턴 검색, 데이터 검증, 텍스트 정제 등 다양한 업무에 적합합니다. 간결한 코드로 강력한 결과를 얻을 수 있으며, 성능과 가독성을 모두 고려해 설계하면 실무에서 큰 도움이 됩니다.
참고 출처
- Python 공식 문서 – re 모듈: https://docs.python.org/3/library/re.html
- Automate the Boring Stuff with Python – Al Sweigart
- Mastering Regular Expressions – Jeffrey Friedl
728x90
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] OS 모듈 완전 가이드 : 파일과 시스템을 마음껏 제어하라 (0) | 2025.07.22 |
|---|---|
| [PYTHON] datetime 모듈 완전 가이드: 날짜와 시간을 자유자재로 (0) | 2025.07.22 |
| [PYTHON] BeautifulSoup 완전 안내 : 웹 크롤링의 핵심 요소 (0) | 2025.07.22 |
| [PYTHON] requests 라이브러리 완전 정복 : HTTP 요청을 간단하게 (0) | 2025.07.22 |
| [PYTHON] Selenium으로 웹을 자동화하는 모든 방법 (0) | 2025.07.22 |