python 기초 11 (정규식 Regular Expression)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
*문자 표현식
^ : 시작, 위치에 따라 부정의 의미 => ^\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. 영문 알파벳으로 이루어진 문자열로 끝난다.