파이썬에서 re 모듈로 정규 표현식을 다룰 때, 매칭 결과에서 여러 개의 그룹을 한 번에 확인하고 싶다면 groups() 메서드를 활용하면 됩니다. 이 글에서는 groups() 메서드의 동작 원리와 실전 예제를 통해 그 사용법을 자세히 살펴보겠습니다.
re.groups() 메서드란?
groups() 메서드는 정규 표현식 패턴에 포함된 모든 하위 그룹(subgroup)을 튜플(tuple) 형태로 반환합니다. 반환되는 값은 패턴의 1번 그룹부터 마지막 그룹까지 순서대로 담기며, 매칭에 참여하지 않은 그룹에는 기본값(default)이 할당됩니다. 기본값을 별도로 지정하지 않으면 None이 반환됩니다.
참고로 파이썬 1.5.1 이후 버전에서는 매칭에 실패한 그룹이 있을 경우 해당 위치에 None이 들어간 형태로 일관성 있게 결과가 반환됩니다.
기본 사용 예제
다음 예제는 소수점 앞부분과 뒷부분을 각각 두 개의 그룹으로 캡처하는 코드입니다.
>>> m = re.match(r"(\d+)\.(\d+)", "27.1835")
>>> m.groups()
('27', '1835')
(\d+) 패턴이 두 번 사용되었으므로, 첫 번째 그룹에는 '27', 두 번째 그룹에는 '1835'가 담긴 튜플이 반환됩니다.
매칭에 실패한 그룹 처리하기
소수점 이하 부분을 선택 사항(optional)으로 만들면, 입력 문자열에 따라 일부 그룹이 매칭에 참여하지 않을 수 있습니다. 이 경우 해당 그룹에는 default 인자로 지정한 값이 반환되며, 지정하지 않으면 기본적으로 None이 됩니다.
>>> m = re.match(r"(\d+)\.?(\d+)?", "27")
>>> m.groups() # 두 번째 그룹은 매칭되지 않아 None 반환
('27', None)
>>> m.groups('0') # default 인자를 '0'으로 지정
('27', '0')
위 예제에서 볼 수 있듯이, m.groups()는 매칭되지 않은 두 번째 그룹에 대해 None을 반환하지만, m.groups('0')처럼 인자를 전달하면 대체값인 '0'이 반환됩니다.
정리
groups()는 정규식 패턴의 모든 캡처 그룹을 튜플로 반환합니다.- 매칭에 참여하지 않은 그룹은
None또는 지정한 default 값으로 채워집니다. - 개별 그룹 하나만 필요하다면
group(1),group(2)처럼 인덱스를 직접 지정하는 방법도 있습니다.
groups() 메서드를 활용하면 복잡한 문자열에서 여러 값을 깔끔하게 추출할 수 있으므로, 로그 분석, 데이터 파싱 등 다양한 상황에서 유용하게 사용됩니다.