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단계 . 으로 시작(^\.) 하는것 또는 .으로 끝나는거(\.$) 는 공백으로 치환