python

python 기초(정규식(Regular Expression))

class="song" 2023. 11. 16.
728x90

정규식은 모든 나라에서 공통으로 사용된다.

패턴이 많아서 사용할 때마다 헷갈리기 쉽다.

 

정규식을 사용하는데 쉽게 와닿는곳은 회원가입을 할 때이다.

메일주소나 휴대폰 번호를 입력할 때, 정규식을 사용한다.

@이가 꼭 들어가야 한다던지, 전화번호 중간과 끝이 4자리씩 들어간다던지 할 때이다.

 

 

정규표현식 패턴은 아래와 같다.

# <정규표현식 패턴>
 * 대괄호 ([]) : 대괄호 안에 있는 문자중에 하나라도 매치되면 추출
 
 * 점(.) : 앞뒤 문자의 사이에 보통 주로 사용, 하나의 문자를 의미
 
 * 반복(*) : 앞의 문자가 0번 이상 반복될 때 추출
 
 * 반복(+) : 앞의 문자가 1번 이상 반복될 때 추출
 
 * 반복({m, n}) : 앞의 문자가 최소 m번, 최대 n번 반복될 때 추출
 
 * 시작(^)과 끝($) : 각 문자열의 시작과 끝을 나타냄
 
 * 물음표(?) : 바로 앞의 문자가 0또는 1회 나타날 수 있음을 의미

 * 역슬래시(\) : 이스케이프라고 읽고, 특수문자를 일반 문자로 인식시킴

 * 소괄호() : 그룹화라고 읽고, 괄호 안의 패턴을 하나의 그룹으로 묶어서 처리 가능

 * 조합가능

 * \d : 숫자
 * \b : 단어의 경계를 나타냄(보통 문장의 처음과 끝에 제시함)
 * \w : 한개의 문자, 한개의 숫자
 * \s : 공백(탭, 스페이스, 줄바꿈(\n), 캐리지리턴(CR))

 

우선 python에서 정규식을 사용할 때는 re를 import 해주어야 한다.

import re

 

 

 

 

 

^의 경우에는 위치에 따라 부정으로도 사용할 수 있다.

def check_num(addr):
    pattern = '[^0-9]'
    if(re.fullmatch(pattern, addr)):
        print(f'{addr}는 유효한 주소입니다.')
    else:
        print(f'{addr}는 잘못된 주소 형식입니다.')

 

 

check_num('a')

결과 : a는 유효한 주소입니다.

0부터 9까지의 포함되지 않으니 True이다.

check_num('1')

결과 : 1는 잘못된 주소 형식입니다.

0부터 9까지의 숫자는 사용할 수 없으므로 1은 False이다

 

 

 

 

 

pattern = '010-\d\d\d\d-\d\d\d\d'
str = '제 휴대폰 번호는 010-1234-4567입니다.'
found = re.search(pattern, str)
print('휴대폰 번호 형식은 : ', found.group())

결과 : 휴대폰 번호 형식은 :  010-1234-4567

위와 같이 텍스트 내에서 전화번호를 추출할 수도 있다.

re의 search함수를 사용할 때 첫 번째 매개변수는 패턴이 들어가고, 두 번째 매개변수는 텍스트를 넣을 수 있다.

 

이메일 체크 함수를 만들 때도 유용하다.

def check_email(email_addr):
    pattern = '^[\w]+[@][\w]+\.[A-Za-z]{2,4}$'
    if(re.fullmatch(pattern, email_addr)):
        print(f'{email_addr}는 유효한 주소입니다.')
    else:
        print(f'{email_addr}는 잘못된 주소 형식입니다.')
check_email('abc123@gmail.com')

결과 : abc123@gmail.com는 유효한 주소입니다.

함수를 정의하고, 사용하게 되면 원하는 조건에 따라 결과물을 추출할 수 있다.

 

정규식을 자주 사용하지 않아도 쓰려고 하면 패턴이 생각나지 않으니 미리미리 적어두거나 기억해 두자

728x90

'python' 카테고리의 다른 글

python 도서관리프로그램(define)(1)  (0) 2023.11.20
python 기초 (함수(function))  (4) 2023.11.20
python 기초 (예외 처리)  (5) 2023.11.16
python 기초(제어문 - while)  (0) 2023.11.16
python 기초(제어문 - for)  (0) 2023.11.15

댓글