https://programmers.co.kr/learn/courses/30/lessons/72410?language=python3
문제를 보자마자 정규표현식을 쓰면 쉽게 풀수 있겠구나 생각이 들었지만 정규표현식을 까먹어서 일단 다른 방식으로 풀다가 결국 찾아보고 정규표현식으로 푼 문제다. 정규표현식 사용법 까먹지말자!!!
import re # regex 정규표현식을 쓰는 모듈
def solution(new_id):
answer = ''
# 1단계 소문자 치환
answer = new_id.lower()
# 2단계 소문자 치환 숫자, -,_,. 제외하면 다제거
answer = re.sub('[^a-z\\d\\-\\_\\.]', '', answer)
# 3단계 마침표 2번 이상을 하나로
answer = re.sub('\\.{2,}', '.', answer)
# 4단계 양 끝 마침표 제거
answer = re.sub('^\\.|\\.$', '', answer)
# 5단계 빈 문자열 이면 a 대입
if answer == '':
answer = 'a'
# 6단계 길이가 16자 이상이면 1~15자만 남기기 & 맨 끝 마침표 제거
answer = re.sub('\\.$','',answer[0:15])
# 7단계 길이가 3이 될 때까지 반복해서 끝에 붙이기
while len(answer) < 3:
answer += answer[-1:]
return answer
print(solution('.h..a...h.a......hBSSDG-__@@..||.'))
1단계 new_id소문자로 치환
2단계 소문자(a-z) 숫자(\d) -_. 가 아닌문자면([] ^) 빈칸으로 치환
\d 를 0-9로 바꿔도 된다.
3단계 .이(\.) 한번 이상 반복되면({2,}) . 하나로 치환 {1,} 은 + 와 같다.
{1,} 로 제출해도 정답처리되고 솔직히 하나 이상 반복이라는 말을 무슨소리인지 잘 모르겠다.
.이 하나면 . 으로 바꾸고 ..도 . 으로 바꾸는거라 .은 그냥 냅두던 말던 상관 없어서 결과가 같은거다.
*이라는 0번 이상 반복도 있다.
4단계 . 으로 시작(^\.) 하는것 또는 .으로 끝나는거(\.$) 는 공백으로 치환