정규식에서 반복 수량자란?
정규표현식에서 +, *, ? 같은 반복 수량자를 사용하면 특정 패턴이 몇 번 반복되는지 간결하게 지정할 수 있어, 표현 가능한 패턴의 범위가 훨씬 넓어집니다.
- + — 왼쪽 패턴이 1회 이상 반복됨을 의미합니다. 예를 들어
i+는 i가 하나 이상 연속으로 나타나는 경우와 일치합니다. - * — 왼쪽 패턴이 0회 이상 반복됨을 의미합니다. 즉, 아예 없어도 일치로 처리됩니다.
- ? — 왼쪽 패턴이 0회 또는 1회 나타나는 경우와 일치합니다. 주로 선택적 요소를 표현할 때 사용합니다.
예제 코드
다음 코드는 앞서 설명한 반복 수량자의 동작을 실제로 보여줍니다.
import re s = "sheeeeeeeeple" match = re.search(r"he+", s) print(match.group())
패턴 r"he+"는 문자열에서 h 바로 뒤에 e가 하나 이상 연속으로 이어지는 부분을 찾습니다. 검색 대상 문자열에는 e가 여러 개 이어져 있으므로, 해당 구간 전체가 한 번에 매칭됩니다.
실행 결과
heeeeeeee
h 다음에 이어지는 모든 e가 포함되어 heeeeeeee가 출력된 것을 확인할 수 있습니다. 참고로 기본 수량자는 탐욕적(greedy) 방식으로 동작하기 때문에, 일치할 수 있는 가장 긴 부분까지 최대한 많이 소비합니다. 만약 최소한만 일치시키고 싶다면 he+?처럼 수량자 뒤에 ?를 붙여 비탐욕적(non-greedy) 모드로 전환할 수 있습니다.
함께 알아두면 좋은 반복 문법
{n}— 정확히 n번 반복 (예:e{3}은 e가 정확히 3개){n}— n번 이상 반복{n,m}— n번 이상 m번 이하 반복