본문 바로가기
Python

Python - Regex 정규식 표현과 직접 함수 구현

by 올엠 2024. 6. 8.
반응형

 정규식 표현에 re 라이브러리를 사용하는데, 어느정도 성능적인 이점을 가져가면서 사용할 수 있는지 확인하기 위해서 비교해보았다.

import timeit
import re


# 정규식 사용
def find_strings_three_more_numbers(input_string):
    pattern = r'\D*\d\D*\d\D*\d\D*'
    matches = re.findall(pattern, input_string)
    return matches


# 직접 구현
def has_three_more_numbers(input_string):
    num_count = 0
    
    for char in input_string:
        if char.isdigit():
            num_count += 1
            if num_count >= 3:
                return True
        else:
            num_count = 0

    return False


# 예시 문자열
example_string = "한글 방식으로 수정해도 됨. 12 and 69."

# 정규식 성능 측정
regex_time = timeit.timeit('find_strings_three_more_numbers(example_string)', globals=globals(), number=10000)


# 직접 구현 성능 측정
direct_implementation_time = timeit.timeit('has_three_more_numbers(example_string)', globals=globals(), number=10000)


# 결과 출력
print('Regex 실행 시간:', regex_time)
print('Direct 실행 시간:', direct_implementation_time)

 

timeit 라이브러리는 성능 비교시 사용하기 유용한 라이브러리 이다. 

 

테스트할 함수를 적고, number를 통해 반복 횟수를 정해주면 실행후 결과 값으로 실행 시간을 반환해준다.

 

테스트 결과는 문장이 짧은 경우 크게 차이가 없지만, 문장이 길어질 경우 성능적 차이는 확연하게 창이나는 것을 알 수 있었다. 필자가 판단하기로는 40-50자가 넘어가면, 성능적으로 적접 구현한 함수가 가장 적은 리소스로 동작이 가능할 것으로 판단된다.

단 비교 문장이 짧은 경우에는 성능적 이점이 크지 않기 때문에, 자신의 상황에 맞게 사용하도록 하자.

 

 

 

반응형