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

정규 표현식은 많은 프로그래밍 언어에서 사용되는 강력한 도구입니다. 이를 사용하여 문자열에서 특정 패턴을 찾거나 추출할 수 있습니다. 그러나 매칭된 결과를 사용하기 전에 문자열을 정리하거나 정규화해야 할 때가 있습니다.

정규 표현식의 매칭 결과 문자열을 정규화하기 위해 Python에는 다양한 방법과 함수가 있습니다. 이 글에서는 몇 가지 유용한 기법을 살펴보겠습니다.

1. re.sub()를 사용한 문자열 치환

re.sub() 함수를 사용하면 정규 표현식에 매칭된 부분을 다른 문자열로 치환할 수 있습니다. 이를 활용하여 매칭된 부분을 원하는 형태로 변경할 수 있습니다. 예를 들어, 전화번호 형식을 통일하거나 공백을 제거하고 싶은 경우 사용할 수 있습니다.

import re

phone_numbers = ["010-1234-5678", "010 9876 5432", "(012) 345-6789"]

# '-'와 공백을 제거하여 통일된 형식으로 만듦
normalized_numbers = [re.sub(r"[-\s]", "", num) for num in phone_numbers]

print(normalized_numbers)
# Output: ['01012345678', '01098765432', '0123456789']

위의 예시에서는 정규 표현식 [-\s]를 사용하여 [-]<공백>을 매칭하고 해당 부분을 빈 문자열로 치환했습니다.

2. re.findall()을 사용한 매칭 결과 추출

re.findall() 함수는 정규 표현식에 매칭되는 부분을 모두 찾아 리스트로 반환하는 함수입니다. 이를 활용하여 특정 패턴의 문자열만 추출할 수 있습니다.

import re

text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
words_with_i = re.findall(r"\b\w*i\w*\b", text)

print(words_with_i)
# Output: ['is', 'dummy', 'text', 'printing', 'and', 'industry']

위의 예시에서는 정규 표현식 \b\w*i\w*\b를 사용하여 i 알파벳이 포함된 단어를 추출했습니다.

3. re.split()을 사용한 문자열 분리

re.split() 함수는 정규 표현식에 매칭되는 부분을 기준으로 문자열을 분리하여 리스트로 반환하는 함수입니다. 이를 활용하여 특정 패턴을 기준으로 문자열을 분리할 수 있습니다.

import re

text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
sentences = re.split(r"\.\s+", text)

print(sentences)
# Output: ['Lorem Ipsum is simply dummy text of the printing and typesetting industry', '']

위의 예시에서는 정규 표현식 \.\s+를 사용하여 . 다음에 오는 하나 이상의 공백을 기준으로 문장을 분리했습니다.

4. re.sub()와 lambda 함수를 사용한 변환식 정의

re.sub() 함수에서는 치환에 사용할 문자열 대신에 변환식을 사용할 수도 있습니다. 이를 활용하여 더 복잡한 문자열 정규화 작업을 수행할 수 있습니다.

import re

text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
converted_text = re.sub(r"\b(\w)(\w*)\b", lambda m: m.group(1).upper() + m.group(2).lower(), text)

print(converted_text)
# Output: 'LOREM iPSUM IS sIMPLY dUMMY tEXT OF THE pRINTING aND tYPESETTING iNDUSTRY.'

위의 예시에서는 정규 표현식 \b(\w)(\w*)\b를 사용하여 단어의 첫 글자는 대문자로, 나머지는 소문자로 변환하였습니다. 이를 위해 lambda 함수를 사용하여 변환식을 정의하였습니다.

정규 표현식의 매칭 결과 문자열 정규화는 수많은 상황에서 유용하게 활용될 수 있습니다. Python의 re 모듈을 사용하여 위에서 설명한 기법들을 응용하면 다양한 문자열 처리 작업을 보다 효율적으로 수행할 수 있습니다.