Python의 정규표현식(re 모듈)에서는 괄호 ()를 단순한 그룹화 이상의 다양한 용도로 활용할 수 있습니다. 아래 표는 괄호와 함께 사용되는 대표적인 특수 구문과 그 동작 방식을 정리한 것입니다.
괄호가 있는 특수 구문 예제
| 번호 | 구문 및 설명 |
|---|---|
| 1 | R(?#comment) "R"과 일치하며, (?# ) 안에 작성된 내용은 모두 주석으로 처리됩니다. 패턴의 가독성을 높이고 싶을 때 유용하게 사용됩니다. |
| 2 | R(?i)uby "uby" 부분을 매칭할 때 대소문자를 구분하지 않습니다. 즉, "RUBY", "ruby", "Ruby" 등 모두 일치 대상이 될 수 있습니다. |
| 3 | R(?i:uby) 위의 (?i)와 동일한 기능을 하지만, 옵션 적용 범위를 "uby" 구간에 한정시키는 인라인 그룹 형태입니다. |
| 4 | rub(?:y|le) "ruby" 또는 "ruble"과 일치하는 그룹을 생성하지만, 캡처 그룹으로 취급하지 않으므로 \1 같은 역참조(backreference)는 만들어지지 않습니다. 불필요한 캡처를 피해 성능과 메모리를 절약할 수 있습니다. |
활용 시 참고 사항
주석 구문 (?#...)은 복잡한 패턴을 다른 개발자와 공유할 때 의도를 설명하는 데 도움이 됩니다. 다만 일부 정규표현식 엔진에서는 지원하지 않을 수 있으므로 Python 전용 코드에서 사용하는 것이 좋습니다.
비캡처 그룹 (?:...)은 그룹화는 필요하지만 나중에 해당 그룹을 참조할 계획이 없을 때 사용합니다. 캡처 그룹 수가 줄어들어 match.group() 호출 시 인덱스 관리가 더 간편해집니다.
인라인 플래그 (?i), (?i:...)는 대소문자 무시 외에도 (?m)(멀티라인), (?s)(dotall) 등 다양한 플래그와 조합하여 패턴의 동작을 세밀하게 제어할 수 있습니다.