파이썬의 re.search() 함수는 정규표현식(RE) 패턴을 문자열에서 검색하여, 첫 번째로 일치하는 위치를 찾아주는 기능입니다. 선택적으로 플래그(flags)를 지정하여 검색 조건을 세부적으로 조절할 수도 있습니다.
기본 문법
re.search() 함수의 문법은 다음과 같습니다.
re.search(pattern, string, flags=0)
매개변수 설명
| 번호 | 매개변수 및 설명 |
|---|---|
| 1 | pattern 문자열에서 찾고자 하는 정규표현식 패턴입니다. |
| 2 | string 패턴과 일치하는 내용이 있는지 검색할 대상 문자열입니다. |
| 3 | flags 비트 OR 연산자(|)를 사용해 여러 개의 플래그를 동시에 지정할 수 있습니다. 주요 플래그는 아래 표를 참고하세요. |
반환값과 match 객체 활용
re.search()는 패턴이 일치하면 match 객체를 반환하고, 일치하는 결과가 없으면 None을 반환합니다. 매칭된 실제 표현식을 얻으려면 match 객체의 group(num) 또는 groups() 메서드를 사용합니다.
| 번호 | match 객체 메서드 및 설명 |
|---|---|
| 1 | group(num=0) 전체 매칭 결과를 반환하며, num 값을 지정하면 해당 번호의 하위 그룹만 반환합니다. |
| 2 | groups() 매칭된 모든 하위 그룹을 튜플 형태로 반환합니다. 하위 그룹이 없으면 빈 튜플을 반환합니다. |
사용 예제
다음은 re.search()를 사용해 문자열에서 패턴을 찾아내는 예제입니다.
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
searchObj = re.search(r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print("searchObj.group() : ", searchObj.group())
print("searchObj.group(1) : ", searchObj.group(1))
print("searchObj.group(2) : ", searchObj.group(2))
else:
print("Nothing found!!")실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
결과 해석
- group(): 패턴과 일치한 전체 문자열인 'Cats are smarter than dogs'가 출력됩니다.
- group(1): 첫 번째 괄호 그룹
(.*)에 해당하는 'Cats'가 출력됩니다. - group(2): 두 번째 괄호 그룹
(.*?)에 해당하는 'smarter'가 출력됩니다.
이처럼 re.search()는 문자열 전체에서 패턴의 첫 번째 등장 위치를 찾는다는 점에서, 문자열 시작 부분만 확인하는 re.match()와 차이가 있습니다. 로그 분석, 데이터 추출, 입력값 검증 등 다양한 상황에서 유용하게 활용할 수 있습니다.