Python

[정규 표현식] Group

비번변경 2022. 8. 29. 18:46

() : Group

특정 문자가 아니라, 특정 문자열이 반복되는지 확인할 때에는 () 메타 문자를 이용해 문자열을 그룹화하여 확인할 수 있다.

 

import re

g = re.search('(ABC)+', 'ABCABCABC OK?')
print(g)

() 메타 문자

 

re.groups()

() 메타 문자로 확인한 문자열 목록을 튜플 형태로 반환한다.

import re

g = re.search(r'(\d{2})-(\d{3,4})-(\d{4})', '02-123-1234')
print(g.groups())

re.groups()

 

 

re.group(int)

() 메타문자로 확인한 문자열을 반환한다.
매개변수로 전달된 값이 없거나 0인 경우에는 일치한 모든 문자열을 반환한다. 매개변수로 전달된 값이 0이 아닌 숫자 n인 경우에는 n번째 그룹에 일치한 문자열을 반환한다. 

import re

g = re.search(r'(\d{2})-(\d{3,4})-(\d{4})', '02-123-1234')
print(g.group())
print(g.group(0))
print(g.group(2))

re.group()

group 함수를 사용하면 일치한 문자열 중 원하는 그룹만 뽑아낼 수 있다.

 

 

group 재참조

한 번 그룹화한 문자열은 '\n' 문자로 재 참조할 수 있다. 인덱스는 1부터 시작한다.

import re

g = re.search(r'(\d{3})-(\d{4})-\2', '010-1234-1234')
print(g.group())
print(g.group(2))
print(g.group(3))

이 경우에는 \d{4}에 일치한 문자열이 - 뒤에서 한 번 더 나와야 한다는 의미이다.  \2에 의해 일치한 문자열은 그룹으로 취급하지 않는다.

group 재참조 시 주의점

일치한 1234가 아니라 다른 문자열이 오는 경우에는 오류가 발생한다.

import re

g = re.search(r'(\d{3})-(\d{4})-\2', '010-1234-5678')
print(g.group())
print(g.group(2))

group 재참조 시 주의점 2

 

group 이름 붙이기

그룹이 너무 많아지는 경우에는 그룹을 식별하기 어려워진다. 이런 경우를 위해 () 문자로 그룹을 지정할 때 그룹의 이름을 지정할 수 있다. 그룹명은 () 메타 문자 내 맨 앞에 아래와 같은 형식으로 설정한다.

?P<group_name>

# 예시
(?P<prefix>\d{3}) # 숫자 세 자리를 prefix라는 이름으로 그룹화

 

예시 코드

import re

g = re.search(r'(?P<prefix>\d{3})-(\d{4})-\d{4}', '010-1234-5678')
print(g.group('prefix'))

group 이름

 

그룹 이름으로 재참조할 때에는 (?P=group_name) 형식으로 한다.

import re

g = re.search(r'(\d{3})-(?P<sec>\d{4})-(?P=sec)', '010-1234-1234')
print(g.group())

group 이름으로 재참조

 

 

참고 문서

https://wikidocs.net/4309#_5

 

 

728x90