안녕하세요? 뜻밖의 행운입니다.
대통령선거 결과가 나온 날이네요
그리고 저의 도전은 46일차 입니다. 이제 4일 남았습니다.
금, 토, 일, 월 끝!
그리고 마지막 후기 면 끝이네요 길었다 길었어
하지만 또 금방 시간이 지나간것 같기도 하고 ㅎ
오늘은 정규표현식 배운 내용을 종합적으로 응용해보는 시간이었습니다.
문제는 총 2문제였습니다.
1번 문제
민수는 날짜 형식을 검사하는 정규표현식을 만드는 업무를 받았다. 업무내용은 다음과 같다.
요건 : "YYYY/MM/DD 형식으로 표현된 날짜를 검사. "
'2022/08/08',
'1000/01/01',
'9999/12/31',
'900/02/02',
'12000/10/26',
'2021/13/01',
'2023/2/02',
'2024/06/3'
'2023/06/35'
풀이
# 날짜 형식 검사하기
# YYYY/MM/DD 형식으로 표현된 날짜를 검사하는 정규표현식 만들기
# 1. 연도는 4자리 숫자로 제한한다 (1000~9999)
# 2. 월은 1월~12월, 일은 1일~31일 까지 가능하다.
# ^\d{4}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])$
import re
datas = [
'2022/08/08',
'1000/01/01',
'9999/12/31',
'900/02/02',
'12000/10/26',
'2021/13/01',
'2023/2/02',
'2024/06/3',
'2023/06/35'
]
regex = '^\d{4}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])$'
for data in datas:
matchObj = re.match(regex, data)
result = (lambda x : True if x != None else False)(matchObj)
print(f'{data} {result}')
정규 표현식이니까 핵심은
위 내용입니다.
앞자리 연도가 4자리이니까 ^\d{4} 로 숫자 4자리로 제한 하는 것이 보입니다.
(0[1-9]|1[0-2])
의 뜻은 앞자리는 0이고 뒤에 한자리는 1 ~ 9 까지 올 수 있다. 또는
앞자리는 1 이고 뒤에 한자리는 0 ~ 2 까지 올 수 있다는 것으로 1월 ~ 12월을 포함합니다.
그렇다면 뒤에 일자는?
(0[1-9]|[12][0-9]|3[01])
월을 했으면 일자도 어렵지 않지요
앞자리는 0, 1, 2, 3이 올 수 있으니
0[1-9], [12], 3 으로 제한을 걸고 3의 경우 30일 31일 밖에 없으니
3[01] 로 제한을 하면 되는 것을 알 수 있습니다.
그럼 실제로 잘 동작하는지 볼까요?
오 True, False가 조건에 따라 잘 반영 되는 것이 보입니다. 굳굳!!
문제 2
자사상품이벤트를 위해 고객들로부터 이메일을 입력 받았다.
고객들이 이메일 형식을 올바르게 입력했는지 검사하는 정규표현식을 작성해보자.
입력받은 메일
'startcoding@maver.com',
'start-coding@maver.com',
'start_coding@maver.co.kr',
'startcoding@k-mail.com',
'@maver.com',
'startcoding?@k-mail.com',
'startcoding@k-mail',
'startcoding@maver'
풀이
# ^[\w-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
import re
regex = re.compile('^[\w-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
datas = [
'startcoding@maver.com',
'start-coding@maver.com',
'start_coding@maver.co.kr',
'startcoding@k-mail.com',
'@maver.com',
'startcoding?@k-mail.com',
'startcoding@k-mail',
'startcoding@maver'
]
for data in datas:
matchObj = regex.match(data)
result = (lambda x : True if x != None else False)(matchObj)
print(f'{data} {result}')
여기서 제일 중요한 것은 메일 형식의 제한이고 이것을 어떻게 정규 표현식으로 공통점을 찾을까 입니다.
\w 의 경우 문자를 의미하죠 즉 모든 문자가 올 수 있다는 것을 의미하고 그 문자가 한 글자 이상이라고 조건을 줍니다.
그리고 중간에는 반드시 @ 표시가 들어가니 @ 를 넣어주고요
그리고 호스트명이 들어가야 하니 [a-zA-Z0-9-]
으로 해주고 그리고 .com 또는 .co.kr 등 이 나올 수 있으니 .[a-zA-Z0-9-.]
저렇게 . 을 잡아줘야겠죠?
잘 돌아가나 볼까요?
굳 잘 되는 것이 보입니다. 뿌듯하네요
'IT > 프로그래밍' 카테고리의 다른 글
패스트캠퍼스 챌린지 최종 미션, 한 번에 끝내는 파이썬 웹개발 초격차 패키지 Online. 강의 후기 (0) | 2022.03.22 |
---|---|
[파이썬] 일급객체 [패스트 캠퍼스 챌린지 50일] (0) | 2022.03.14 |
[파이썬] multiprocessing 모듈 사용법 [패스트 캠퍼스 챌린지 49일] (0) | 2022.03.13 |
[파이썬] threading 모듈 사용법 [패스트 캠퍼스 챌린지 48일] (0) | 2022.03.12 |
[파이썬] 동시성과 병렬성[패스트 캠퍼스 챌린지 47일] (0) | 2022.03.11 |
[파이썬] re 모듈 사용방법 [패스트 캠퍼스 챌린지 45일] (0) | 2022.03.09 |
[파이썬] re 모듈 사용방법 [패스트 캠퍼스 챌린지 44일] (0) | 2022.03.08 |
[파이썬] 정규표현식 추가 [패스트 캠퍼스 챌린지 43일] (0) | 2022.03.07 |
[파이썬] 정규표현식 [패스트 캠퍼스 챌린지 42일] (0) | 2022.03.06 |
[파이썬] 파이썬에서 SQLite3 사용하기 [패스트 캠퍼스 챌린지 41일] (0) | 2022.03.05 |