본문 바로가기

언어/Python

[ Python ] re.findall()과 group() 메서드 사용하기

반응형

re.findall() 함수와 group() 메서드를 함께 사용하는 것은 일반적으로 일치하는 모든 패턴의 서브그룹을 추출할 때 유용합니다. re.findall() 함수는 모든 일치 항목을 리스트로 반환하며, 각 항목은 문자열이거나 튜플일 수 있습니다.

1. re.findall()group()의 차이점

  • re.findall(): 주어진 패턴과 일치하는 모든 문자열을 리스트로 반환합니다. 패턴에 그룹이 있다면, 그룹화된 부분 문자열을 튜플로 반환합니다.
  • group(): re.Match 객체의 메서드로, 특정 일치 그룹을 반환합니다.

2. 예제와 출력

1. 단순 패턴 매칭

import re

# 예제 문자열
string = "My phone number is 123-456-7890 and 987-654-3210."

# 정규 표현식 패턴
pattern = r"\d{3}-\d{3}-\d{4}"

# re.findall을 사용하여 일치하는 부분 찾기
matches = re.findall(pattern, string)

print(matches)

출력:

['123-456-7890', '987-654-3210']

이 예제에서는 re.findall() 함수가 전화번호 패턴과 일치하는 모든 문자열을 리스트로 반환합니다.

2. 그룹화된 패턴 매칭

import re

# 예제 문자열
string = "My email is example@test.com and test@example.com."

# 정규 표현식 패턴 (그룹화 포함)
pattern = r"(\w+)@(\w+)\.(\w+)"

# re.findall을 사용하여 일치하는 부분 찾기
matches = re.findall(pattern, string)

print(matches)

출력:

[('example', 'test', 'com'), ('test', 'example', 'com')]

이 예제에서는 re.findall() 함수가 이메일 패턴의 각 부분을 그룹화하여 튜플로 반환합니다. 각 튜플은 로컬 파트, 도메인, 최상위 도메인을 포함합니다.

3. re.finditer()group() 사용

re.finditer()re.findall()과 비슷하지만, 일치 항목에 대한 반복자(iterator)를 반환합니다. 이 반복자를 사용하면 각 일치 항목에 대해 group() 메서드를 호출할 수 있습니다.

import re

# 예제 문자열
string = "My phone number is 123-456-7890 and 987-654-3210."

# 정규 표현식 패턴 (그룹화 포함)
pattern = r"(\d{3})-(\d{3})-(\d{4})"

# re.finditer을 사용하여 일치하는 부분 찾기
matches = re.finditer(pattern, string)

for match in matches:
    print("Full match:", match.group())
    print("Group 1:", match.group(1))
    print("Group 2:", match.group(2))
    print("Group 3:", match.group(3))
    print("Start position:", match.start())
    print("End position:", match.end())
    print("Span:", match.span())
    print()

출력:

Full match: 123-456-7890
Group 1: 123
Group 2: 456
Group 3: 7890
Start position: 19
End position: 31
Span: (19, 31)

Full match: 987-654-3210
Group 1: 987
Group 2: 654
Group 3: 3210
Start position: 36
End position: 48
Span: (36, 48)

이 예제에서는 re.finditer()를 사용하여 각 일치 항목에 대해 반복하며, group() 메서드를 사용하여 전체 일치 및 각 그룹을 개별적으로 출력합니다.

3. 요약

  • re.findall()은 패턴과 일치하는 모든 부분 문자열을 리스트로 반환합니다. 패턴에 그룹이 포함된 경우, 각 일치는 튜플로 반환됩니다.
  • re.finditer()는 반복자를 반환하며, 이 반복자를 사용하여 각 일치 항목에 대해 group() 메서드를 호출할 수 있습니다.
  • group() 메서드는 re.Match 객체에서 특정 일치 그룹을 반환하는 데 사용됩니다.
반응형