# 정규표현식 정규 표현식은 특정한 규칙(패턴)을 가진 문자열을 찾아내기 위한 표현 방식입니다. 텍스트 데이터를 처리할 때 특정 문자열을 검색하거나, 문자열을 추출하거나, 문자열을 변환하는 등 다양한 작업에 활용됩니다. 예를 들어, 이메일 주소, 전화번호, 특정 형식의 로그 데이터 등을 찾아내는 데 사용됩니다. ## 정규 표현식의 구성 요소 * 메타 문자: 일반 문자가 아닌 특별한 의미를 가지는 문자입니다. 예를 들어, `.`은 임의의 한 문자를 의미하고, `*`은 앞의 문자가 0번 이상 반복되는 것을 의미합니다. * 특수 시퀀스: `\d` (숫자), `\s` (공백), `\w` (단어 문자) 등 특정 문자 집합을 나타내는 시퀀스입니다. * 문자 클래스: `[abc]` 와 같이 대괄호 안에 포함된 문자 중 하나를 의미합니다. ### 메타 문자 * `.`: 임의의 한 문자 * `^`: 문자열의 시작 * `$`: 문자열의 끝 * `*`: 앞의 문자가 0번 이상 반복 * `+`: 앞의 문자가 1번 이상 반복 * `?`: 앞의 문자가 0번 또는 1번 반복 * `{m,n}`: 앞의 문자가 최소 m번, 최대 n번 반복 * `[abc]`: a, b, c 중 하나의 문자 * `[^abc]`: a, b, c를 제외한 문자 ## 정규 표현식 예시 * `\d{3}-\d{4}-\d{4}`: 전화번호 형식 (예: 010-1234-5678) * `\w+@\w+\.\w+`: 이메일 주소 형식 (예: [이메일 주소 삭제됨]) * `<[^>]+>`: HTML 태그 추출 * `^http://`: http://으로 시작하는 문자열 ## re 모듈 re 모듈은 파이썬에서 정규 표현식을 사용하여 문자열을 검색, 치환, 분할하는 등 다양한 작업을 수행할 수 있도록 지원하는 표준 라이브러리입니다. * 패턴 매칭: 주어진 문자열에서 정규 표현식과 일치하는 부분을 찾습니다. * 문자열 치환: 일치하는 부분을 다른 문자열로 바꿉니다. * 문자열 분할: 정규 표현식을 기준으로 문자열을 분할합니다. ```python import re text = "The phone number is 415-555-1212." pattern = "\d{3}-\d{3}-\d{4}" # 검색 match = re.search(pattern, text) if match: print(match.group()) # 출력: 415-555-1212 # 모든 일치하는 부분 찾기 all_matches = re.findall(pattern, text) print(all_matches) # 출력: ['415-555-1212'] # 치환 new_text = re.sub(pattern, "XXX-XXX-XXXX", text) print(new_text) # 출력: The phone number is XXX-XXX-XXXX. ``` ### 주요 함수 * `re.search(pattern, string)`: 문자열 전체에서 패턴을 찾아 첫 번째 매칭 객체를 반환합니다. * `re.findall(pattern, string)`: 문자열에서 패턴과 일치하는 모든 부분을 리스트로 반환합니다. * `re.sub(pattern, repl, string)`: 문자열에서 패턴과 일치하는 부분을 다른 문자열로 치환합니다. * `re.compile(pattern)`: 정규 표현식을 컴파일하여 패턴 객체를 생성합니다. ```python import re # 정규 표현식 컴파일 pattern = re.compile(r'\d+') # 숫자만 추출하는 패턴 # 문자열 검색 text = "The price is $19.99" match = pattern.search(text) if match: print(match.group()) # 출력: 19.99 ```