그룹화(Grouping)
정규식에서 그룹화는 표현식의 일부를 괄호 ()로 묶어서 수행합니다. 이렇게 하면 단일 문자가 아닌 그룹 전체에 연산자를 적용할 수 있어, 보다 복잡하고 유연한 패턴 매칭이 가능합니다.
캡처링 그룹과 역참조
괄호는 하위 표현식을 그룹으로 묶는 기능 외에도 역참조(backreference)를 생성하는 중요한 역할을 합니다. 정규식의 괄호로 묶인 부분이 문자열에서 매칭한 내용은 역참조에 저장되며, 이를 활용하면 정규식 내에서 이미 매칭된 부분을 재사용할 수 있습니다.
하위 표현식이 괄호 안에 위치하면 \1, $1 등의 방식으로 해당 캡처 그룹에 접근할 수 있습니다.
예를 들어, 정규식 \b(\w+)\b\s+\1\b는 'tahiti tahiti'처럼 반복되는 단어를 찾습니다. 그 이유는 (\w+)의 괄호가 매칭된 단어를 그룹 1로 캡처하고, 이후의 역참조 \1이 그룹 1에서 캡처된 것과 동일한 문자열을 다시 매칭하기 때문입니다.
예제 코드
import re
s = 'Tahiti Tahiti Atoll'
result = re.findall(r'\b(\w+)\b\s+\1\b', s)
print(result)실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.
['Tahiti']
결과에서 볼 수 있듯이, 문자열에서 'Tahiti Tahiti'라는 반복 단어 패턴이 발견되었으며, 첫 번째 단어인 'Tahiti'가 캡처 그룹 1의 값으로 반환됩니다. 이러한 역참조 기법은 중복 단어 검색, 태그 짝 맞추기 검증 등 다양한 실무 시나리오에서 유용하게 활용됩니다.