Updated:

프로그래머스 - 신규아이디 추천 ↗️

신규아이디 추천

  • 오직 정규표현식으로만 풀이한 경우

import re
def convertToUpper(matchObj):
    up_char = matchObj.group().lower()
    return up_char

def solution(new_id):
    #1단계
    new_id = re.sub('[A-Z]', convertToUpper, new_id)
    #2단계
    new_id = re.sub('[^A-Za-z0-9-._]', '', new_id)
    #3단계
    new_id = re.sub('\.+', '.', new_id)
    #4단계
    new_id = re.sub('\A\.|\.\Z', '', new_id)
    #5단계
    if new_id == '':
        new_id += 'a'
    #6단계
    new_id = re.sub('(?<=.{15}).+', '', new_id)
    new_id = re.sub('\.\Z', '', new_id)
    #7단계
    while len(new_id) <= 2:
        new_id = re.sub('.(?=\Z)', '\g<0>\g<0>', new_id)
    return new_id

이렇게 정규표현식으로만 구성할 수 있고, 일부는 더 간단하게 할 수 있다.

  • 다른 방법

    • 1단계

      new_id = new_id.lower()
      
    • 2단계

        deleteChar = ['-','_','.']
      
        for i in new_id:
                if i.isalnum() is not True:
                    if i not in deleteChar:
                        new_id = new_id.replace(i, '')
      
    • 6단계

            while len(new_id) <= 2:
              new_id += new_id[-1]
      

정규표현식 관련 기본 이론 ↗️

댓글 쓰기