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

파이썬 정규식으로 텍스트에서 모든 부사와 위치를 찾는 방법

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()는 단순히 어떤 단어가 부사인지 알려주는 것을 넘어, 해당 단어가 원본 텍스트의 어디에 있는지까지 정확히 파악할 수 있게 해줍니다. 따라서 텍스트 편집, 하이라이트 처리, 교정 도구 등 위치 정보가 필요한 텍스트 분석 작업에 특히 유용하게 활용됩니다.