[파이썬] 괄호(())의 서브 패턴 그룹화

안녕하세요! 파이썬에는 정규 표현식 패턴을 작성할 때 서브 패턴을 그룹화하는 기능이 있습니다. 오늘은 괄호(())를 사용하여 서브 패턴을 그룹화하는 방법에 대해 알아보겠습니다.

서브 패턴 그룹화는 괄호 안에 패턴을 작성하여 해당 그룹의 매칭 결과를 따로 추출하거나 조작할 수 있도록 합니다. 이를 통해 정규 표현식의 작성과 결과 처리에 유연성을 더할 수 있습니다.

기본적인 그룹화

서브 패턴 그룹화를 사용하려면 괄호로 패턴을 둘러싸면 됩니다. 예를 들어, 다음과 같은 문자열에서 이름과 나이를 추출하고자 할 때를 생각해보겠습니다.

import re

pattern = r'(\w+) is (\d+) years old'
text = "John is 30 years old, Mike is 25 years old"

result = re.findall(pattern, text)
print(result)
[('John', '30'), ('Mike', '25')]

위 예시에서는 “(\w+)”는 이름을 나타내는 그룹, “(\d+)”는 나이를 나타내는 그룹입니다. “re.findall()” 함수를 사용하여 패턴과 일치하는 모든 그룹을 찾아서 반환합니다.

그룹마다 이름 붙이기

패턴 그룹마다 이름을 붙일 수도 있습니다. 이는 추출한 결과를 더 직관적으로 이해할 수 있게 해주고, 특정 그룹에 더 쉽게 접근할 수 있도록 합니다. 그룹 이름은 “<그룹이름>" 형식으로 지정할 수 있습니다.

import re

pattern = r'(?P<name>\w+) is (?P<age>\d+) years old'
text = "John is 30 years old, Mike is 25 years old"

result = re.findall(pattern, text)
for match in result:
    print(f"Name: {match['name']}, Age: {match['age']}")
Name: John, Age: 30
Name: Mike, Age: 25

위 예시에서는 “(?P\w+)"은 "name"이라는 그룹, "(?P\d+)"은 "age"라는 그룹을 나타냅니다. "re.findall()"을 통해 모든 일치하는 그룹을 찾아 반복문을 통해 접근하고, 각 그룹의 이름을 사용하여 값을 추출합니다.

서브 패턴 그룹화 활용하기

서브 패턴 그룹화는 패턴 작성 시에 유연성을 제공합니다. 예를 들어, 이메일 주소에서 사용자명과 도메인을 추출하고자 할 때를 생각해보겠습니다.

import re

pattern = r'([\w\.-]+)@([\w\.-]+)'
text = "john.doe@example.com, mike@gmail.com"

result = re.findall(pattern, text)
for match in result:
    print(f"Username: {match[0]}, Domain: {match[1]}")
Username: john.doe, Domain: example.com
Username: mike, Domain: gmail.com

위 예시에서는 “([\w.-]+)” 그룹을 통해 사용자명과 도메인을 각각 추출합니다.

이외에도 서브 패턴 그룹화는 패턴 일치 여부를 검증하거나 일치한 결과에 대해 조건부 로직을 실행하는데에도 유용합니다.

파이썬의 정규 표현식에서 서브 패턴을 괄호(())로 그룹화하여 활용하는 방법에 대해 알아보았습니다. 그룹화는 패턴의 일부를 추출하거나 조작하면서 정규 표현식을 더욱 강력하게 사용할 수 있도록 해줍니다. 다양한 상황에서 유연성을 발휘할 수 있는 이 기능을 적절히 활용하여 효과적인 정규 표현식을 작성해보세요!