Python에서 정규 표현식 사용하기

정규 표현식은 문자열을 처리하거나 검색할 때 특정 패턴에 맞는 부분을 찾는 데 사용됩니다. 예를 들어, 파일 이름에서 와일드카드(*와 ?)를 사용한 것과 유사하지만, 더 강력하고 정확한 텍스트 매칭이 가능합니다. Python에서는 re 모듈을 통해 정규 표현식을 지원합니다.

기본 문법 요약

아래 표는 정규 표현식의 기본적인 기호와 그 설명입니다.
기호설명예시설명
.모든 문자 일치b.tbat, b1t 등과 일치
\w알파벳/숫자/밑줄 일치b\wtb1t, b_t와 일치
\d숫자 일치\d\d01, 23 등과 일치
*0회 이상 반복\w*문자, 숫자 또는 밑줄 0개 이상
+1회 이상 반복\w+문자, 숫자 또는 밑줄 1개 이상
{n}정확히 n번 반복\w{3}문자, 숫자 또는 밑줄 3개

re 모듈 함수

Python의 re 모듈에는 다음과 같은 핵심 함수들이 있습니다:
함수설명
compile(pattern)정규 표현식 컴파일
match(pattern, string)처음부터 일치 확인
search(pattern, string)처음으로 일치하는 부분 찾기
findall(pattern, string)모든 일치 항목 찾기
sub(pattern, repl, string)패턴 일치하는 부분 치환

예제 실습

실습 1: 사용자 이름 및 QQ 번호 유효성 검사

사용자 이름은 알파벳, 숫자 또는 밑줄로 구성되며 길이는 6~20자 사이여야 합니다. QQ 번호는 첫 글자가 0이 아닌 5~12자의 숫자여야 합니다.


import re

def validate():
    name = input("사용자 이름 입력: ")
    qq = input("QQ 번호 입력: ")

    name_pattern = r'^[a-zA-Z0-9_]{6,20}$'
    qq_pattern = r'^[1-9]\d{4,11}$'

    if re.match(name_pattern, name):
        print("유효한 사용자 이름입니다.")
    else:
        print("잘못된 사용자 이름입니다.")

    if re.match(qq_pattern, qq):
        print("유효한 QQ 번호입니다.")
    else:
        print("잘못된 QQ 번호입니다.")

validate()

실습 2: 텍스트에서 중국 내 휴대전화 번호 추출

다음 텍스트에서 중국 내 핸드폰 번호를 찾아보겠습니다:


import re

text = '''
중요한 일을 8130123456789번 말해봅시다. 제 전화번호는 13512346789이고,
이건 아닙니다 15600998765. 비상전화는 110이나 119입니다.
'''

phone_pattern = re.compile(r'(?:\D)(1[34578]\d{9})(?:\D)')
phones = re.findall(phone_pattern, text)

print(phones)

실습 3: 부적절한 단어 필터링

주어진 텍스트에서 부적절한 단어를 *로 대체합니다:


import re

sentence = "너는 바보냐? 나도 너의 할아버지를 *. F**k you."
cleaned_sentence = re.sub(r'[操肏艹]|fuck|shit|바보[비병]', '*', sentence, flags=re.IGNORECASE)
print(cleaned_sentence)

실습 4: 시 구분하기

시를 구분하여 각 문장을 리스트로 출력합니다:


import re

poem = '창밖의 달빛, 의심스러운 서리. 고개 들고 밝은 달을 보고, 고개 숙여 고향 생각.'
sentences = re.split(r'[,。]', poem)
filtered_sentences = [s for s in sentences if s]
print(filtered_sentences)

태그: Regex python re-module

8월 25일 08:52에 게시됨