본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] Regex 완전 정복 : 정규표현식으로 문자열 다루기

by Papa Martino V 2025. 7. 22.
728x90

Regex 완전 정복 : 정규표현식으로 문자열 다루기
[PYTHON] Regex

 

 

정규표현식(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의 정규표현식은 복잡한 패턴 검색, 데이터 검증, 텍스트 정제 등 다양한 업무에 적합합니다. 간결한 코드로 강력한 결과를 얻을 수 있으며, 성능과 가독성을 모두 고려해 설계하면 실무에서 큰 도움이 됩니다.

참고 출처

728x90