Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 정규식 match()와 search() 함수의 차이점과 활용 방법

정규식(regex)으로 수행할 수 있는 대표적인 연산은 두 가지입니다. 하나는 search(검색)이고, 다른 하나는 match(매칭)입니다. 문자열에서 특정 패턴을 찾거나 패턴과 일치 여부를 확인할 때, 이 두 함수를 적절히 활용하면 정규식을 훨씬 효율적으로 사용할 수 있습니다.

match()와 search()의 핵심 차이

하나의 문자열이 주어졌다고 가정해 보겠습니다. regex match()는 오직 문자열의 시작 부분에서만 패턴을 확인하는 반면, regex search()문자열 전체 어디에서든 패턴을 찾습니다.

또한 match() 함수는 패턴이 발견되면 match 객체를 반환하고, 패턴이 없으면 None을 반환합니다.

  • match() – 문자열의 시작 부분에서만 패턴을 찾으며, 일치하는 경우 매치 객체를 반환합니다.
  • search() – 문자열 내 임의의 위치에서 패턴을 찾으며, 일치하는 경우 매치 객체를 반환합니다.

그럼 실제 예제를 통해 두 함수의 동작 차이를 살펴보겠습니다. 아래 예제에서는 주어진 문자열에서 'Engineers'라는 단어를 찾는 작업을 수행합니다.

예제 1: re.match() 사용

import re
pattern = "Engineers"
string = "Scientists dream about doing great things. Engineers Do them"
result = re.match(pattern, string)
if result:
    print("Found")
else:
    print("Not Found")

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

출력 결과

Not Found

'Engineers'라는 단어가 문자열 중간에 존재하지만, match()는 문자열 맨 앞에서만 패턴을 확인하기 때문에 일치하지 않아 'Not Found'가 출력됩니다.

이번에는 동일한 예제에 search()를 적용해 보겠습니다.

예제 2: re.search() 사용

import re
pattern = "Engineers"
string = "Scientists dream about doing great things. Engineers Do them"
result = re.search(pattern, string)
if result:
    print("Found")
else:
    print("Not Found")

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

출력 결과

Found

search()는 문자열 전체를 대상으로 패턴을 검색하기 때문에, 'Engineers'가 문자열 중간에 있더라도 정상적으로 패턴을 찾아 'Found'를 출력합니다.

정리

패턴이 반드시 문자열의 시작 부분에 있는지 확인해야 한다면 match()를, 문자열 어디에 있든 상관없이 패턴의 존재 여부만 확인하면 된다면 search()를 사용하는 것이 좋습니다. 두 함수의 동작 방식을 정확히 이해하면 불필요한 버그를 예방하고 더 깔끔한 정규식 코드를 작성할 수 있습니다.