re.finditer()로 부사와 그 위치 찾기
파이썬 공식 문서에 따르면, 패턴에 매칭되는 모든 결과를 단순히 매칭된 문자열 이상의 정보와 함께 얻고 싶다면 finditer() 함수가 유용합니다. findall()이 매칭된 문자열의 리스트를 반환하는 것과 달리, finditer()는 각 매칭에 대한 매치 객체(match object)를 순차적으로 반환하기 때문입니다.
예를 들어, 한 작가가 자신의 글에서 모든 부사(-ly로 끝나는 단어)와 그 정확한 위치를 찾고 싶다고 가정해 보겠습니다. 이때 finditer()를 다음과 같이 활용할 수 있습니다.
예제 코드
>>> import re
>>> text = "He was carefully disguised but captured quickly by police."
>>> for m in re.finditer(r"\w+ly", text):
... print('%02d-%02d: %s' % (m.start(), m.end(), m.group(0)))
07-16: carefully
40-47: quickly코드 설명
위 코드의 핵심 요소를 살펴보겠습니다.
- 정규식 패턴
r"\w+ly": 하나 이상의 단어 문자(\w+) 뒤에 'ly'가 붙는 형태를 찾아 부사를 추출합니다. m.start(): 매칭된 문자열이 시작되는 인덱스(0부터 시작)를 반환합니다.m.end(): 매칭된 문자열이 끝나는 바로 다음 인덱스를 반환합니다.m.group(0): 실제로 매칭된 전체 문자열을 반환합니다.
결과 해석
실행 결과를 보면 두 개의 부사가 발견되었습니다.
carefully— 문장에서 7번째부터 16번째 위치(끝 인덱스 기준)에 존재합니다.quickly— 40번째부터 47번째 위치에 존재합니다.
이처럼 finditer()는 단순히 어떤 단어가 부사인지 알려주는 것을 넘어, 해당 단어가 원본 텍스트의 어디에 있는지까지 정확히 파악할 수 있게 해줍니다. 따라서 텍스트 편집, 하이라이트 처리, 교정 도구 등 위치 정보가 필요한 텍스트 분석 작업에 특히 유용하게 활용됩니다.