입력된 문자를 정해진 조건에 맞도록 변환한 후 반환한다. 조건은 다음과 같다.
문제에서 제시된 과정을 통해 입력된 아이디(new_id)를 변환한다. 과정은 다음과 같다.
입력된 new_id를 규칙에 맞게 변환한 추천아이디를 return하는 함수 solution 만들기
정규표현식을 이용하여 풀었다.
import re
answer = new_id.lower()
answer = re.sub('[^.\-_a-z0-9]', '', answer)
[^.\-_a-z0-9]
: 마침표(.), bar(-), underbar(_), 소문자 알파벳, 숫자를 제외한 문자를 의미하는 정규표현식
.-_
부분이 마침표(.)부터 underbar(_)까지로 인식되어 @ 등의 문자가 제거되지 못했다.answer = re.sub('[.]{2,}', '.', str(answer))
[.]{2, }
: 마침표가 2개 이상인 문자열을 의미하는 정규표현식.
[.]
와 같이 문자 클래스 안에서 사용해주어야 한다.{n,m}
이면 n이상 m이하를 의미한다. 위의 정규표현식의 {2, }
는 2개 이상을 의미한다.answer = re.sub('^[.]+|[.]+$', '', str(answer))
^[.]+|[.]+$
: ^[.]+
OR [.]+$
, 시작이 마침표 1개 이상으로 시작하거나, 끝이 마침표 1개 이상으로 끝나는 경우를 의미하는 정규표현식
^[.]+
: ^는 문자열의 시작 부분을 의미. +는 앞의 문자가 한개 이상, 즉 {1,}과 동일한 의미[.]+$
: $는 문자열의 끝 부분을 의미if len(answer) == 0 : answer = 'a'
남긴 후 시작/끝점 마침표 체크
if len(answer) > 15 :
answer = answer[:15]
answer = re.sub('^[.]+|[.]+$', '', str(answer))
if len(answer) < 3 : answer += answer[-1] * (3 - len(answer))
def solution(new_id):
import re
answer = new_id.lower()
answer = re.sub('[^.\-_a-z0-9]', '', answer)
answer = re.sub('[.]{2,}', '.', str(answer))
answer = re.sub('^[.]+|[.]+$', '', str(answer))
if len(answer) == 0 : answer = 'a'
if len(answer) > 15 :
answer = answer[:15]
answer = re.sub('^[.]+|[.]+$', '', str(answer))
if len(answer) < 3 : answer += answer[-1] * (3 - len(answer))
return answer
정규표현식 자꾸 까먹어서 쓸 때마다 자꾸 공부했던 자료를 다시 들춰보게 된다.
이번 기회로 다시 익숙해지는 기회를 가져서 좋았다.
이젠 진짜 안까먹어야지... 아자아자.. ^ __ ^ ) 9
점프 투 파이썬 - 07-3. 강력한 정규 표현식의 세계로