코딩헤딩

python 기초 11 (정규식 Regular Expression) 본문

python

python 기초 11 (정규식 Regular Expression)

멈머이 2023. 11. 10. 00:12
728x90

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

*문자 표현식
^ : 시작, 위치에 따라 부정의 의미 => ^\d 숫자로 시작하면
$ : 끝 => \d$ 숫자로 끝나면
. : 문자(한 글자) =>.. 이면 두 글자
\d : 숫자 ( 숫자 하나 )
\s : 공백 (tab, space, 줄바꿈(\n), 캐리지리턴(CR))
\w : 한개의 문자 또는 숫자 포함
[] : 범위 => -[abc]( a 또는 b 또는 c ), [a-z], [1-9], [A-Z]

 

*수량 한정자
* : 0이상 반복 => '', "aa", "aaaaaaaa" \w* (True)
+ : 1번이상 반복 => ''(False), "aa"(False), "a"(True)
? : 0 or 1회 반복
{m} : m만큼 반복 => {3}
{n, m} : n회 이상, m회 이하
(ab) : 그룹화 => 'ab', 'abab', 'abababab' (True)

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

예시 1) 전화번호 형식이 맞는지에 대한 프로그램

 

*정규식을 적용하지 않을 때

def chk_num(phone_num):
    if len(phone_num) != 13:
        return False
    if phone_num[0:3] != '010':
        return False
    if phone_num[3] != '-':
        return False
    for i in range(4, 8):
        if not phone_num[i].isdecimal():
            return False
        if phone_num[8] != '-':
            return False
        for i in range(9, 13):
            if not phone_num[i].isdecimal():
                return False
        return True
print('010-3333-6666 : =>', chk_num('010-3333-6666'))

결과 : 010-3333-6666 : => True

print('000-3333-6666 : =>', chk_num('000-3333-6666'))

결과 : 000-3333-6666 : => False

 

정규식을 적용하지 않으면 코드가 길어진다. 이렇게 길어진 코드는 정규식을 사용하면 간략하게 나타낼 수 있다.

 

*정규식 사용

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

결과 : 휴대폰 번호 형식은 :  010-1111-2222

 

1. 정규식을 사용하기 위한 모듈을 import 한다.

2. 휴대폰 번호의 정규식 작성

3. re.search() 함수를 사용하여 변수 str에 들어 있는 문자열에서 `pattern` 변수에 지정한 패턴과 일치하는 부분을 찾는다. 

4. 결과 출력

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

예시 2) 이메일 형식이 맞나 확인하는 프로그램

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

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

 

'^[\w]+@[\w]+\.[A-Za-z]{2,4}$'

1. 문자, 숫자, 하이픈, 마침표로 이루어진 문자열로 시작한다.

2. @ 기호로 구분된다.

3. 문자, 숫자, 하이픈, 마침표로 이루어진 문자열로 이어진다.

4. 마침표로 끝난다.

5. 영문 알파벳으로 이루어진 문자열로 끝난다.

728x90