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

파이썬 정규표현식: match와 search의 차이 완벽 정리

파이썬은 정규 표현식(regular expression)을 활용한 두 가지 기본 연산을 제공합니다.

  • re.match() — 문자열의 맨 앞부분에서만 패턴이 일치하는지 검사합니다.
  • re.search() — 문자열 어느 위치에서든 패턴이 일치하는지 검사합니다. 이는 Perl이 기본적으로 수행하는 방식과 동일합니다.

두 함수의 동작 차이는 실제 예제를 통해 더 명확하게 이해할 수 있습니다.

예제 코드

아래 예제에서는 동일한 문자열과 패턴('dogs')에 대해 match()search()를 각각 호출하여 그 결과를 비교합니다.

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"

# match: 문자열 시작 부분에서만 검사
matchObj = re.match(r'dogs', line, re.M | re.I)
if matchObj:
    print("match --> matchObj.group():", matchObj.group())
else:
    print("No match!!")

# search: 문자열 전체에서 검사
searchObj = re.search(r'dogs', line, re.M | re.I)
if searchObj:
    print("search --> searchObj.group():", searchObj.group())
else:
    print("Nothing found!!")

실행 결과

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

No match!!
search --> searchObj.group(): dogs

결과 분석

출력 결과를 보면 두 함수의 차이가 분명하게 드러납니다.

  • match()는 문자열이 반드시 패턴으로 시작해야 일치로 판단하기 때문에, "Cats are smarter than dogs"라는 문자열은 'dogs'로 시작하지 않으므로 매칭에 실패합니다.
  • search()는 문자열 전체를 스캔하므로 문장 중간에 있는 'dogs'를 성공적으로 찾아냅니다.

참고로 예제에서 사용된 플래그 중 re.I(IGNORECASE)는 대소문자를 구분하지 않도록 하며, re.M(MULTILINE)은 여러 줄 문자열에서 각 줄의 시작과 끝을 기준으로 매칭할 수 있게 해줍니다. 따라서 문자열의 시작 부분부터 패턴을 찾으려면 match(), 특정 패턴이 어디든 등장하기만 하면 되는 경우에는 search()를 사용하는 것이 적절합니다.