본문 바로가기

언어/Python

[ Python ] 정규 표현식을 컴파일 해서 사용하자.

반응형

정규 표현식을 compile해서 사용하는 방법

파이썬에서 정규 표현식을 사용할 때, re 모듈의 compile 함수를 사용하여 정규 표현식을 미리 컴파일할 수 있습니다. 이는 동일한 정규 표현식을 여러 번 사용할 경우 성능을 향상시키는 데 유용합니다. 정규 표현식을 컴파일하면 이를 재사용할 수 있는 정규 표현식 객체가 생성됩니다. 이 객체는 매칭, 검색, 치환 등의 작업에 사용할 수 있습니다.

1. re 모듈의 compile 함수

re.compile() 함수는 정규 표현식을 컴파일하여 정규 표현식 객체를 반환합니다. 이를 통해 정규 표현식을 여러 번 사용할 때마다 새로 컴파일하지 않고도 사용할 수 있습니다.

import re

# 정규 표현식 컴파일
phone_pattern = re.compile(r'\(?\b[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}\b')

2. 컴파일된 정규 표현식 객체 사용

컴파일된 정규 표현식 객체는 match(), search(), findall(), sub() 등의 메소드를 사용할 수 있습니다. 이를 통해 문자열에서 패턴을 매칭하거나, 검색하거나, 치환할 수 있습니다.

2.1. findall() 메소드 사용
import re

# 정규 표현식 컴파일
phone_pattern = re.compile(r'\(?\b[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}\b')

# 예제 문자열
example_text = """
Here are some phone numbers:
- (123) 456-7890
- 987-654-3210
- 555.123.4567
- 1234567890
- (800) 555 1234
"""

# findall 메소드 사용
phone_numbers = phone_pattern.findall(example_text)
print("Extracted phone numbers:", phone_numbers)

위 예제에서는 phone_pattern 객체의 findall 메소드를 사용하여 문자열에서 모든 전화번호를 추출합니다.

2.2. search() 메소드 사용
import re

# 정규 표현식 컴파일
phone_pattern = re.compile(r'\(?\b[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}\b')

# 예제 문자열
example_text = "Call me at (123) 456-7890."

# search 메소드 사용
match = phone_pattern.search(example_text)
if match:
    print("Found phone number:", match.group())
else:
    print("No phone number found")

위 예제에서는 phone_pattern 객체의 search 메소드를 사용하여 문자열에서 첫 번째로 매칭되는 전화번호를 검색합니다.

2.3. sub() 메소드 사용
import re

# 정규 표현식 컴파일
phone_pattern = re.compile(r'\(?\b[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}\b')

# 예제 문자열
example_text = "Call me at (123) 456-7890 or 987-654-3210."

# sub 메소드 사용
masked_text = phone_pattern.sub("###-###-####", example_text)
print("Masked text:", masked_text)

위 예제에서는 phone_pattern 객체의 sub 메소드를 사용하여 문자열에서 모든 전화번호를 ###-###-#### 형식으로 마스킹합니다.

전체 코드 예제

위에서 설명한 내용을 종합하여, 컴파일된 정규 표현식을 사용하여 전화번호를 추출하는 전체 코드를 정리해보겠습니다.

import re

def extract_phone_numbers(text):
    # 정규 표현식 컴파일
    phone_pattern = re.compile(r'\(?\b[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}\b')

    # findall 메소드 사용
    phone_numbers = phone_pattern.findall(text)
    return phone_numbers

example_text = """
Here are some phone numbers:
- (123) 456-7890
- 987-654-3210
- 555.123.4567
- 1234567890
- (800) 555 1234
"""

phone_numbers = extract_phone_numbers(example_text)
print("Extracted phone numbers:", phone_numbers)

이 코드는 정규 표현식을 컴파일하여 전화번호를 추출하는 예제입니다. 컴파일된 정규 표현식을 사용하면 동일한 패턴을 여러 번 사용할 때 성능을 향상시킬 수 있습니다.

반응형