본문 바로가기

Study Information Technology

Python의 정규 표현식을 활용한 패턴 매칭 및 텍스트 처리

728x90
반응형

Python의 정규 표현식을 활용한 패턴 매칭 및 텍스트 처리

Overview

Python의 정규 표현식(regular expressions, regex)은 문자열에서 패턴을 찾고, 텍스트를 처리하는 데 강력한 도구입니다. 이 기능을 사용하면 복잡한 문자열 작업을 간단하게 수행할 수 있습니다. 정규 표현식의 기본 개념부터 주요 메서드, 자주 발생하는 에러 및 해결 방법까지 자세히 살펴보겠습니다.


1. 정규 표현식의 기본 개념

정규 표현식은 문자열에서 특정 패턴을 찾기 위해 사용하는 패턴 문자열입니다. Python에서는 re 모듈을 사용하여 정규 표현식을 다룰 수 있습니다. 예를 들어, 이메일 주소나 전화번호와 같은 패턴을 찾는 데 유용합니다.

예시: 이메일 주소 찾기

import re

text = "문의는 support@example.com으로 보내주세요."
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
matches = re.findall(pattern, text)
print(matches)  # 출력: ['support@example.com']

이 예제에서 사용한 정규 표현식은 이메일 주소의 형식을 정의합니다. \b는 단어 경계를 의미하고, [A-Za-z0-9._%+-]+는 이메일의 사용자 이름 부분을 정의하며, @[A-Za-z0-9.-]+는 도메인 이름을 나타냅니다. 마지막으로 \.[A-Z|a-z]{2,}는 도메인 확장자를 찾습니다.


2. 주요 메서드

Python의 re 모듈은 다양한 메서드를 제공하여 정규 표현식을 활용할 수 있습니다.

  • re.match(): 문자열의 시작 부분에서 패턴이 일치하는지 검사합니다.
import re

text = "hello world"
pattern = r'hello'
match = re.match(pattern, text)
print(match.group())  # 출력: 'hello'
  • re.search(): 문자열 전체에서 패턴을 검색하고 일치하는 첫 번째 항목을 반환합니다.
import re

text = "hello world"
pattern = r'world'
search = re.search(pattern, text)
print(search.group())  # 출력: 'world'
  • re.findall(): 문자열에서 모든 패턴을 찾아 리스트로 반환합니다.
import re

text = "cat bat hat"
pattern = r'[bch]at'
matches = re.findall(pattern, text)
print(matches)  # 출력: ['cat', 'bat', 'hat']
  • re.sub(): 패턴과 일치하는 부분을 다른 문자열로 교체합니다.
import re

text = "hello 123"
pattern = r'\d+'
replaced = re.sub(pattern, 'number', text)
print(replaced)  # 출력: 'hello number'

3. 자주 발생하는 에러 및 해결 방법

정규 표현식을 사용할 때 발생할 수 있는 일반적인 에러와 그 해결 방법은 다음과 같습니다.

  • re.error: bad escape: 이 에러는 잘못된 이스케이프 시퀀스가 사용되었을 때 발생합니다. 정규 표현식에서 백슬래시(\)를 사용할 때는 이스케이프 문자를 정확히 작성해야 합니다.

해결 방법: 올바른 이스케이프 시퀀스를 사용합니다. 예를 들어, \d는 숫자를 의미합니다.

import re

text = "My number is 123."
pattern = r'\d+'  # 올바른 정규 표현식
numbers = re.findall(pattern, text)
print(numbers)  # 출력: ['123']
  • re.error: unmatched parenthesis: 괄호의 짝이 맞지 않을 때 발생합니다. 정규 표현식에서 괄호를 사용할 때는 항상 쌍을 맞춰야 합니다.

해결 방법: 괄호의 짝을 맞춥니다. 필요할 때는 \(\)로 이스케이프 처리합니다.

import re

text = "example (123)"
pattern = r'\(\d+\)'  # 올바른 정규 표현식
match = re.search(pattern, text)
print(match.group())  # 출력: '(123)'
  • re.error: nothing to repeat: 반복 연산자(*, +, {n,m})가 제대로 된 패턴 없이 사용될 때 발생합니다.

해결 방법: 반복 연산자가 올바른 패턴에 적용되도록 합니다.

import re

text = "aabbcc"
pattern = r'(ab)+'
match = re.findall(pattern, text)
print(match)  # 출력: ['ab', 'ab']

참고문서

이 자료들을 통해 Python의 정규 표현식을 깊이 있게 탐구하고, 복잡한 문자열 처리를 효과적으로 수행할 수 있습니다.

728x90
반응형