번호 그룹은 fragile, named 그룹은 안정
패턴이 자라면 그룹 번호가 괄호 추가/제거 마다 바뀜. Named 그룹이 각 캡처에 번호 대신 참조하는 이름 줘서 해결.
문법은 flavor 마다:
- Python / 옛 PCRE:
(?P<name>...) - .NET / PCRE / JavaScript:
(?<name>...) - Named 그룹 backreference (Python):
(?P=name) - Named 그룹 backreference (.NET / PCRE):
\k<name>
Python 은 둘 다 지원: (?P<name>...) (자기 거) 와 3.x 부터 (?<name>...). 언어 간엔 가능하면 bare 꺽쇠 형태 선호.
Named 그룹 사용 이유
이유 셋:
- 가독 호출자.
m.group('year')가 self-documenting;m.group(1)은 주석 필요. - 편집 가로질러 안정. 중간에 그룹 추가해도
m.group('year')안 깨짐. - Self-documenting 패턴. 미래의 자신이
(?P<email>...)읽고 뭐 캡처되는지 앎.
비용
언급할 만한 거 없음. Named 그룹 무료. 그룹 목적이 위치로부터 명백하지 않을 때마다 사용.