21 Mon

신규 아이디 추천

'''
https://programmers.co.kr/learn/courses/30/lessons/72410
신규 아이디 추천
[풀이]
0. 정규식 사용 문제. 정규식을 모른다면 끔찍하다.
'''
import re

def solution(new_id):
    new_id = new_id.lower()
    new_id = ''.join(re.findall('[a-z]|[0-9]|[.]|[_]|[-]', new_id))
    new_id = re.sub('[.]{2,}', '.', new_id)
    if len(new_id) and new_id[0] == ".":
        new_id = new_id[1:]
    if len(new_id) and new_id[-1] == ".":
        new_id = new_id[:-1]
    size = len(new_id)
    if not size: new_id += "a"
    if size >= 16:
        new_id = new_id[:15]
    if new_id[-1] == ".":
        new_id = new_id[:-1]
    while len(new_id) < 3:
        new_id = new_id + new_id[-1]
    return new_id
'''
정규식이랑 if를 너무 혼재해서 사용한 듯 하다
나보다 더 정규식을 잘 쓴 사람 코드를 배워야겠다
심지어 코드 구성도 멋지다

import re

def solution(new_id):
    st = new_id
    st = st.lower()
    st = re.sub('[^a-z0-9\-_.]', '', st)
    # [^] 는 특정 문자를 제외하라는 의미
    
    st = re.sub('\.+', '.', st)
    # 이 부분은 re.sub('[.]{2,}', '.', new_id)와 차이는 없다.
    
    st = re.sub('^[.]|[.]$', '', st)
    # ^는 ~로 시작하는, $는 ~로 끝나는. 이 정규식 문법을 생각을 못했다. 문제 의도는 이거였던것 같다
    
    st = 'a' if len(st) == 0 else st[:15]
    # 5~6단계를 합친 조건. 멋있다
    
    st = re.sub('^[.]|[.]$', '', st)
    # 이 때는 첫 시작은 고려하지 않아도 된다. 그냥 복붙한 것으로 추정.
    
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st
'''

Last updated

Was this helpful?