re.search() 메서드란?
re.search() 메서드는 re.match()와 비슷하지만, 문자열의 시작 부분에서만 패턴을 찾는 re.match()와 달리 문자열 전체를 대상으로 패턴을 검색할 수 있습니다.
즉, 패턴이 문자열 어느 위치에 있더라도 re.search()는 이를 찾아낼 수 있습니다. 다만 일치하는 첫 번째 결과 하나만 반환한다는 점에 유의해야 합니다.
예제
import re result = re.search(r'Tutorials', 'TP Tutorials Point TP') print(result.group())
출력
Tutorials
위 예제에서 볼 수 있듯이, search() 메서드는 문자열 중간에 위치한 'Tutorials'도 정상적으로 찾아냅니다. 만약 re.match()를 사용했다면 문자열이 'TP'로 시작하기 때문에 아무것도 찾지 못해 None을 반환했을 것입니다.
re.findall() 메서드란?
re.findall()은 주어진 문자열에서 일치하는 모든 패턴을 리스트(list) 형태로 반환합니다. 문자열의 처음부터 끝까지 검색하며, 패턴과 일치하는 모든 항목을 한꺼번에 가져올 수 있습니다.
따라서 패턴과 일치하는 모든 항목을 확인하고 싶다면 항상 re.findall()을 사용하는 것이 권장됩니다. 상황에 따라 re.search()와 re.match()의 역할을 모두 대신할 수 있기 때문입니다.
예제
import re # search(): 첫 번째 일치 항목만 반환 result = re.search(r'TP', 'TP Tutorials Point TP') print(result.group()) # findall(): 일치하는 모든 항목을 리스트로 반환 results = re.findall(r'TP', 'TP Tutorials Point TP') print(results)
출력
TP ['TP', 'TP']
re.search()는 문자열 앞뒤에 두 개 존재하는 'TP' 중 첫 번째 것만 반환한 반면, re.findall()은 두 개 모두 리스트에 담아 반환한 것을 확인할 수 있습니다.
핵심 차이점 요약
- re.search(): 문자열 전체를 검색하지만, 첫 번째로 일치하는 매치 객체 하나만 반환합니다.
- re.findall(): 문자열 전체를 검색하고, 일치하는 모든 문자열을 리스트로 반환합니다.
- re.match(): 문자열의 시작 부분에서만 패턴 일치 여부를 확인합니다.
정리하자면, 단일 일치 여부를 빠르게 확인할 때는 re.search(), 반복적으로 나타나는 모든 패턴을 추출할 때는 re.findall()을 사용하는 것이 효율적입니다.