기술(Tech, IT)/파이썬(Python)

[Tech, Python] re.compile()

Daniel803 2024. 3. 8. 08:37

re.compile() 함수는 정규식 패턴을 정규식 객체로 컴파일하는 데 사용된다. 그런 다음 이 객체를 사용해 문자열과 일치시키거나 문자열 내에서 패턴을 검색할 수 있다. 정규식을 객체로 컴파일하면 몇 가지 이점이 있다.

 

  1. 효율성
    : 정규식 패턴을 객체로 컴파일하면 패턴이 분석돼 매칭에 최적화된 내부 형식으로 한 번만 변환된다. 동일한 패턴을 여러 번 사용하려는 경우 한 번 컴파일하고 객체를 재사용하는 것이 re.match(), re.search() 등의 함수에서 패턴을 직접 사용할 때마다 다시 해석하는 것보다 더 효율적이다.

  2. 재사용 가능성
    : 정규식 객체는 일단 컴파일되면 여러 문자열에 걸쳐 여러 번 재사용할 수 있다. 이렇게 하면 코드가 더 깔끔해질 뿐만 아니라 패턴이 한 곳에 정의되므로 유지 관리도 더 쉽다.

  3. 추가 메소드
    : 컴파일된 정규식 객체는 .match(), .search(), .findall(), .finditer(), .sub() 등과 같은 패턴 매칭을 위한 여러 메소드를 제공한다. 이러한 메소드는 re 모듈에서 제공되는 함수와 유사하게 작동하지만 컴파일된 패턴을 사용된다.

  4. 패턴 구성
    : 패턴을 컴파일할 때 인자로 플래그를 전달해 패턴의 동작을 수정할 수도 있다. 예를 들어, re.IGNORECASE를 사용하면 패턴의 대소문자를 구분하지 않고, re.MULTILINE은 여러 줄 문자열의 맥락에서 ^ 및 $ 작동 방식을 변경하고, re.DOTALL은 점(.)이 줄 바꿈을 포함한 모든 문자와 일치하도록 할 수 있다.

import re

text = "Steve's phone number is 123-456-7890."
pattern = re.compile(r'(\d{3})-(\d{3})-(\d{4})')
print(type(pattern), pattern)
# <class 're.Pattern'> re.compile('(\\d{3})-(\\d{3})-(\\d{4})')
match = pattern.search(text)

if match:
    print(match.group())
    # 123-456-7890