본문 바로가기

문돌이 존버/코딩연습

파이썬 정규표현식 연습 문제 풀이 (1)

반응형

문제 소스는 여기에서 참고했습니다. 


1. 날짜 표현 탐지하기

DD/MM/YY 형태로 작성된 날짜를 탐지하는 정규표현식을 작성해라
day는 01~31일, month는 01~12월, year은 1000~2999년까지 있다고 가정한다
1, 2, 3 등 숫자 1개의 경우 앞에 0이 붙는다

문제에 나온 것처럼 각종 조건을 대괄호 [] 와 | 를 통해 or 관계를 표시해줬습니다. 

2. 강력한 비밀번호 탐지하기

비밀번호 강력한지 확인해라
강력한 기준은 최소 길이가 8 이상이고, 대문자와 소문자를 포함해야 하며, 적어도 하나의 숫자가 있어야 한다
대문자 및 소문자는 모두 영어 기준이다

먼저, 전방탐색 개념을 이용했는데, 이는 조건을 만족하는 것이 있는지 확인하는 과정입니다. 전방탐색 구문운 ?= 로 시작하고 등호 다음에 일치할 텍스트가 오는 하위 표현식입니다. 즉 .*[A-Z]에 일치하는 텍스트가 있니? 라고 질문을 던지며 확인해보자는 것이죠. 

위의 과정을 쪼개서 살펴보면 아래와 같은 단계로 나눌 수 있는데요. 

(.*[A-Z]) -> 영어 대문자가 나오기 전에 어떠한 것이 와도 매치된다
. -> 모든 문자, 기호, 숫자 
* -> 해당 문자, 기호, 숫자가 없거나 하나 이상 있거나

(.*[a-z]) -> 영어 소문자가 나오기 전에 어떠한 것이 와도 매치된다

(.*[a-z]) -> 숫자가 나오기 전에 어떠한 것이 와도 매치된다

.{n,} -> 전에 나온 토큰(패턴에 매치되는 문자열)에 n개 문자열 포함

아래의 경우 .{1}이기 때문에 숫자 뒤에 1개만 더 추가로 하여 매치됩니다. 따라서 처음 발견한 1 그리고 2라는 숫자를 1개 더한 12가 매치되고, 이후 새롭게 시작하는 3과 A라는 문자 1개를 더한 3A가 매치되는 것입니다. 

이때 위의 답에서 나온 .{8,} 처럼 , 를 찍어주면 8개 "이상"이라는 뜻입니다. 쉽게 말해, .{8,} 전에 무엇이 매치되든 8개 이상 연속으로 매치되면 된다는 뜻이죠. 

728x90
반응형