https://programmers.co.kr/learn/courses/30/lessons/72410
문제에 나온 조건 그대로 구현
import re
def solution(new_id):
# 1단계
new_id = new_id.lower()
# 2단계
new_id = re.sub('[~!@#$%^&*()=+\[{\]}:?,<>/]', '', new_id)
# 3단계
new_id = re.sub('(([.])\\2{1,})', '.', new_id)
# 4단계
if new_id[0] == '.':
new_id = new_id[1:]
if new_id[-1] == '.':
new_id = new_id[:-1]
# 5단계
if len(new_id) == 0:
new_id = 'a'
# 6단계
if len(new_id) >= 16:
new_id = new_id[:15]
# 7단계
while len(new_id) <= 2:
new_id = new_id + new_id[-1]
return new_id
4단계에서 범위 관련 오류가 발생함.
if문을 사용해서 길이가 1보다 클 때와 아닐 때로 나눠서 작성을 해봐도 계속 같은 오류가 발생
(이유가 뭔지는 모르겠음)
계속 고민하다 문득strip()
함수를 떠올림
+) new_id 값을 보존하고 새로운 변수를 생성
import re
def solution(new_id):
# 1단계
result = new_id.lower()
# 2단계
result = re.sub('[~!@#$%^&*()=+\[{\]}:?,<>/]', '', result)
# 3단계
result = re.sub('(([.])\\2{1,})', '.', result)
# 4단계
result = result.strip('.')
# 5단계
if len(result) == 0:
result = 'a'
# 6단계
result = result[:15].rstrip('.')
# 7단계
while len(result) <= 2:
result = result + result[-1]
return result
제출 코드에서 더 깔끔하게 정제할 수 있을 것 같아 코드를 다시 작성해봄.
특히 정규표현식 부분을 더 깔끔하게 수정하고 싶었음.
import re
def solution(new_id):
# 1,2단계
result = re.sub('[^\w._\-]', '', new_id.lower())
# 3단계
result = re.sub('\.\.+', '.', result)
# 4단계
result = result.strip('.')
# 5단계
if len(result) == 0: result = 'a'
# 6단계
result = result[:15].rstrip('.')
# 7단계
result += result[-1] * (3 - len(result))
return result
정규표현식을 공부해놓으면 다양한 문자열에 대한 조건을 깔끔한 코드로 작성할 수 있을 것 같다.
자주 사용되는 정규표현식은 외워놔도 좋을 것 같다.