패턴에 일치하는 문자 삭제하기

Python:
패턴에 일치하는 문자 삭제하기

방법:

import re

# 예제 문자열
text = "Hello, World! 1234"

# 모든 숫자 제거
no_digits = re.sub(r'\d', '', text)
print(no_digits)  # 출력: "Hello, World! "

# 구두점 제거
no_punctuation = re.sub(r'[^\w\s]', '', text)
print(no_punctuation)  # 출력: "Hello World 1234"

# 모음 제거
no_vowels = re.sub(r'[aeiouAEIOU]', '', text)
print(no_vowels)  # 출력: "Hll, Wrld! 1234"

나만의 커스텀 함수

이 작업을 자주 수행하기 때문에 간단한 delete() 함수로 리팩토링했습니다. 이건 doctests를 시연하는 좋은 방법입니다:

def delete(string: str, regex: str) -> str:
    """
    >>> delete("Hello, world!", "l")
    'Heo, word!'

    >>> delete("Hello, world!", "[a-z]")
    'H, !'
    """
    return re.sub(regex, "", string)

심층 분석

텍스트에서 패턴과 일치하는 문자를 삭제하는 관행은 컴퓨터 과학에서 오래 전부터 있다. sedgrep과 같은 초기 Unix 도구들로 거슬러 올라간다. Python에서는 re 모듈이 이 기능을 제공하며, 정규 표현식을 이용해 텍스트 처리에 있어 강력하고 다양한 도구를 제공한다.

re 모듈의 대안은 다음과 같다:

  • 단순한 경우를 위한 문자열 메소드 replace().
  • 보다 복잡한 패턴과 더 나은 유니코드 지원을 위한 제3자 라이브러리 regex.

내부적으로 re.sub()을 사용할 때, Python 해석기는 패턴을 일련의 바이트코드로 컴파일하며, 입력 텍스트에 직접 패턴 매칭을 수행하는 상태 기계에 의해 처리된다. 이 작업은 큰 문자열이나 복잡한 패턴에 대해 리소스 집약적일 수 있으므로, 대규모 데이터 처리에 있어 성능 고려사항이 중요하다.

참고자료