re 모듈의 finditer 메서드
re 모듈의 finditer 메서드는
문자열에서 정규 표현식과
일치하는 모든 항목의 이터레이터를 반환합니다. 메서드의 첫 번째 매개변수에는
정규식을 지정합니다. 두 번째 매개변수에는
검색 대상 문자열을 설정합니다. 세 번째
선택적 매개변수로 플래그를
지정할 수 있습니다.
메서드는 왼쪽에서 오른쪽으로 검색하며 모든
일치 항목을 확인합니다.
구문
import re
re.finditer(정규식, 문자열, [플래그])
예제
문자열에서 숫자로 이루어진 모든 부분 문자열을 찾아봅시다:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)
print(res)
코드 실행 결과:
<callable_iterator object at 0x000002AA891300A0>
예제
이전 예제에서 얻은 객체를 값으로 갖는 변수 res를
선언해 보겠습니다. 그런 다음
루프로 반복하겠습니다:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)
for el in res:
print(el)
코드 실행 후 두 개의 Match 객체를 얻습니다:
<re.Match object; span=(5, 8), match='123'>
<re.Match object; span=(14, 17), match='456'>
이 객체들은 정규식과 일치하는 모든 항목에 대한 정보를 튜플 형태로 담고 있습니다. 인덱스를 통해 이들로부터 일치 항목을 출력할 수 있습니다:
for el in res:
print(el[0])
코드 실행 결과:
'123'
'456'
예제
더 명확하게 보기 위해 검색 시 그룹(캡처 그룹)을 사용하겠습니다. 그리고 루프로 객체를 반복하면서 첫 번째 일치 항목(이는 0번 그룹으로 간주됨)과, 그 요소들을 또한 각각의 그룹으로 나누어 출력하겠습니다:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('(\d)(\d)', txt)
for el in res:
print(el[0], el[1], el[2])
코드 실행 후 전체 부분 문자열인 0번 그룹과, 이 부분 문자열의 첫 번째 및 두 번째 문자를 얻습니다:
'12' '1' '2'
'45' '4' '5'