[파이썬] 정규 표현식의 매칭 결과 문자열 필터링

정규 표현식은 문자열에서 패턴을 찾는 강력한 도구입니다. 이를 사용하면 특정한 패턴을 가진 문자열을 손쉽게 찾아낼 수 있습니다.

Python은 re 모듈을 통해 정규 표현식을 사용할 수 있습니다. 정규 표현식을 활용하여 매칭 결과로 얻은 문자열을 필터링하고 원하는 결과만 추출하는 방법을 알아보겠습니다.

1. re.findall()

Python의 re 모듈에는 findall() 함수가 있습니다. 이 함수는 정규 표현식과 대상 문자열을 주면, 매칭된 모든 문자열을 리스트로 반환합니다.

import re

pattern = r'\d+'  # 1개 이상의 숫자에 매칭되는 정규 표현식
string = 'apple123banana456'

result = re.findall(pattern, string)
print(result)  # ['123', '456']

위 예제에서는 정규 표현식 \d+를 사용하여 숫자에 매칭되는 문자열만 추출하였습니다. findall() 함수는 정규 표현식에 매칭되는 모든 문자열을 리스트로 반환합니다.

2. 문자열 필터링 with List Comprehension

Python에서는 re.findall() 대신 리스트 컴프리헨션을 활용하여 문자열을 필터링할 수도 있습니다.

import re

pattern = r'\d+'  # 1개 이상의 숫자에 매칭되는 정규 표현식
string = 'apple123banana456'

result = [e for e in re.split(r'\D+', string) if e]
print(result)  # ['123', '456']

위 예제에서는 re.split() 함수를 사용하여 정규 표현식 \D+ (숫자가 아닌 문자에 매칭)을 기준으로 문자열을 나누었습니다. 리스트 컴프리헨션을 통해 숫자로만 이루어진 문자열을 필터링하여 추출하였습니다.

3. 매칭 결과에서 특정 패턴 추출

정규 표현식의 매칭 결과에서 특정 패턴만 추출하고 싶은 경우에는 그룹을 사용합니다.

import re

pattern = r'(\w+)@(\w+\.com)'  # 이메일 주소에 매칭하는 정규 표현식
string = 'john@example.com, alice@gmail.com'

result = re.findall(pattern, string)
filtered_result = [email[1] for email in result]
print(filtered_result)  # ['example.com', 'gmail.com']

위 예제에서는 이메일 주소에 매칭하는 정규 표현식 (\w+)@(\w+\.com)을 사용하여 매칭된 이메일 주소만 추출하였습니다. 리스트 컴프리헨션을 통해 두 번째 그룹 문자열인 도메인 주소만 필터링하여 추출하였습니다.

정규 표현식을 사용하면 복잡한 패턴을 손쉽게 매칭할 수 있고, 매칭 결과를 필터링하여 원하는 결과만 추출할 수 있습니다. 이를 활용하여 데이터 처리나 문자열 분석 등 다양한 작업에 유용하게 활용할 수 있습니다.