92  정규식 쿼리 도구 (Regex Query Tool)

정규 표현식(Regular Expressions)을 사용하여 텍스트에서 특정 패턴을 검색하고 분석할 수 있는 도구를 만들어 봅시다. 웹사이트나 문서에서 이메일, 전화번호, 또는 복잡한 텍스트 패턴을 한눈에 찾을 수 있게 도와줍니다.

이 프로젝트는 정규식 패턴을 익히고, 이를 실시간으로 테스트하고 결과를 시각화하는 방법을 배우기에 아주 좋습니다. 특히 최근 텍스트 데이터의 전처리와 분석에 필수적인 정규식 도구를 직접 설계해 보세요.

92.1 주요 개발 포인트

  • 정규식 패턴 입력 및 테스트: 사용자가 입력한 패턴을 실시간으로 반영하여 매칭되는 부분을 강조합니다.
  • 텍스트 검색 및 추출: 대량의 텍스트 데이터에서 원하는 정보를 한꺼번에 추출하여 목록으로 보여줍니다.
  • 매칭 결과 시각화 (Highlighter): 문서 내에서 정규식과 일치하는 텍스트에 배경색을 칠해 눈에 띄게 표시합니다.
  • 그룹 캡처 지원 (Group Capturing): 복잡한 정규식에서 각 그룹별로 추출된 값을 표 형태로 깔끔하게 정리합니다.
  • 사용자 인터페이스 (GUI): 패턴 입력창, 원본 텍스트 창, 그리고 검색 결과창을 포함한 직관적인 UI를 구축합니다.

92.2 Python 구현 예시 (간단한 정규식 검색 로직)

import re

class RegexTool:
    """
    정규 표현식을 사용하여 텍스트에서 패턴을 검색하고 추출합니다.
    """
    def __init__(self):
        print("정규식 쿼리 엔진 시작.")

    def search_pattern(self, pattern, text):
        """
        주어진 패턴으로 텍스트를 검색하여 모든 매칭 결과를 반환합니다.
        """
        print(f"패턴 '{pattern}'으로 검색 중...")
        
        try:
            matches = re.finditer(pattern, text)
            results = []
            
            for m in matches:
                results.append({
                    "start": m.start(),
                    "end": m.end(),
                    "text": m.group()
                })
            
            print(f"총 {len(results)}개의 매칭 결과를 찾았습니다.")
            return results
            
        except re.error as e:
            print(f"잘못된 정규식 패턴입니다: {e}")
            return None

if __name__ == "__main__":
    tool = RegexTool()
    
    # 이메일 추출 정규식 테스트
    email_regex = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
    sample_text = "제 이메일은 user@example.com 이고, 다른 이메일은 contact@google.co.kr 입니다."
    
    matches = tool.search_pattern(email_regex, sample_text)
    
    if matches:
        print("\n--- 검색 결과 ---")
        for m in matches:
            print(f"위치 ({m['start']}-{m['end']}): {m['text']}")