[Python] 정규 표현식: 그룹핑
앞에서 총 두차례 정규표현식에 대해 포스팅하면서 지금까지는 하나의 정규표현식만을 사용하며 그에 매칭이 되는지 여부를 판단하였다.
🙄 다양한 알고리즘 문제를 풀다 보니 서로 다른 정규표현식을 사용할 경우, 하나의 문자열에 반복해서 각각의 정규표현식과 매칭이 되는지 확인해야 하는 번거로움이 있었다.
하지만 정규표현식 그룹을 사용하게 되면 이러한 수고를 덜 수 있다!!
그렇다면 지금부터 본격적으로 정규표현식 그룹에 대해 알아보자!!
👩 정규표현식 그룹?
- 여러 개의 정규표현식을 그룹으로 작성하여 해당 그룹과 일치하는 문자열을 각각 얻어오는 방식이다.
- (정규표현식)(정규표현식)…
- 다음과 같이 ()를 통해 정규표현식을 묶어 그룹을 만든다.
👩 매치객체.group(인덱스)?
import re
p = re.compile(r"(\d+[-]\d+[-]\d+)\s+(\w+)\s+(\d+)")
m = p.search("010-1111-2222 doyoul 23")
위 정규식은 “전화번호 + “ “ + 이름 + “ “ + 나이” 형태의 문자열을 찾는 정규식이다.
그렇다면 여기에서 매칭된 문자열에서 이름만을 가지고 오고 싶다면 어떻게 해야 할까??
🙄 이때 사용되는 것이 바로 group 메서드이다.
- group(인덱스)를 사용함으로 그룹핑된 부분의 문자열을 뽑아낼 수 있게 된다.
인덱스 | 값 |
---|---|
group() | 매치된 전체 문자열을 얻어온다. |
group(0) | 매치된 전체 문자열을 얻어온다. |
group(n) | n번째 그룹에 해당되는 문자열을 얻어온다. |
그렇다면 위에서 그룹핑된 부분을 각각 확인해보자!!
print(m.group()) # 010-1111-2222 doyoul 23
print(m.group(2)) # doyoul
👩 매치객체.groups()?
- groups()의 사용은 더욱 간단하다. 이는 각 그룹에 해당하는 문자열을 튜플로 반환하게 된다.
그렇다면 위의 예에서 groups()를 사용하면 결과가 어떻게 될까?
print(m.groups()) # ('010-1111-2222', 'doyoul', '23')
👩 매치객체.group(‘그룹이름’)
단순히 인덱스를 통해서 값을 가져오는 것이 아닌 그룹이름을 지정해 그 값을 가져올 수 있다.
이때 사용되는 것이 바로 (?P< 그룹이름 >정규표현식)이다.
import re
p = re.compile(r"(?P<phone>\d+[-]\d+[-]\d+)\s+(?P<name>\w+)")
m = p.search("010-1111-2222 doyoul 23")
사용한 예시에 그룹이름을 적용해 보았다!!
그렇다면 결과도 바로 확인해보자!
print(m.group("phone")) # 010-1111-2222
print(m.group("name")) # doyoul
댓글남기기