번호는 위치에 묶이지만 이름은 뜻에 묶여
패턴 중간에 괄호를 추가하면 뒤쪽 캡처 그룹의 번호가 모두 밀릴 수 있어. 이름 붙은 그룹을 사용하면 캡처의 위치 대신 year나 email처럼 값의 뜻으로 참조할 수 있지.
문법은 엔진 방언마다 달라
- Python과 옛 PCRE:
(?P<name>...) - .NET, PCRE, JavaScript:
(?<name>...) - Python의 이름 역참조:
(?P=name) - .NET과 PCRE의 이름 역참조:
\k<name>
Python 내장 re에서 그룹을 선언할 때는 (?P<name>...)을 써야 해. (?<name>...)을 그대로 가져오면 컴파일 오류가 나.
이름을 붙이면 패턴과 호출 코드가 함께 읽혀
m.group('year')는m.group(1)보다 꺼내는 값의 뜻이 분명해.- 앞쪽에 다른 그룹을 추가해도 이름 참조는 번호처럼 밀리지 않아.
(?P<email>...)처럼 패턴 안에서도 캡처 목적을 설명할 수 있어.
따로 치러야 할 큰 비용은 없어
그룹의 뜻이 주변만 보고 즉시 드러나지 않는다면 이름을 붙여. 짧은 일회성 패턴에서는 번호도 충분하지만, 패턴이 길어지거나 호출 코드와 떨어져 있으면 이름이 유지보수 비용을 훨씬 줄여 줘.