파이썬 정규식에서 주어진 문자열 내 각 매칭(match) 항목의 정확한 위치를 찾으려면 re.finditer() 메서드를 사용하면 됩니다.
finditer()는 문자열에서 정규식 패턴과 일치하는 모든 부분을 매치 객체(Match Object) 형태로 순서대로 반환하는 이터레이터입니다. 각 매치 객체는 다음과 같은 유용한 정보를 제공합니다.
m.start()— 매칭이 시작되는 위치(인덱스)m.end()— 매칭이 끝나는 위치(인덱스)m.span()— 시작 위치와 끝 위치를 튜플로 반환m.group()— 실제 매칭된 문자열
예제 코드
아래 예제는 문자열 'A5B6C7D8'에서 대문자와 숫자에 해당하는 패턴 [A-Z0-9]를 찾아, 각 매칭의 시작 위치와 매칭된 문자를 함께 출력합니다.
import re
p = re.compile("[A-Z0-9]")
for m in p.finditer('A5B6C7D8'):
print(m.start(), m.group())실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
0 A 1 5 2 B 3 6 4 C 5 7 6 D 7 8
추가 활용: span()으로 범위 확인하기
매칭의 시작과 끝 위치를 한 번에 알고 싶다면 m.span()을 활용할 수 있습니다.
import re
p = re.compile("[A-Z][0-9]")
for m in p.finditer('A5B6C7D8'):
print(m.span(), m.group())
# 출력:
# (0, 2) A5
# (2, 4) B6
# (4, 6) C7
# (6, 8) D8이처럼 re.finditer()를 사용하면 단순히 매칭 여부만 확인하는 것이 아니라, 각 매칭이 문자열 내 어디에 위치하는지 정확한 인덱스 정보까지 얻을 수 있어 텍스트 분석, 하이라이트 처리, 위치 기반 치환 등 다양한 작업에 활용할 수 있습니다.