Search
Duplicate
🪐

프로그래머스_신규아이디추천_정규표현식

간단소개
알고리즘 풀이, 정규표현식
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
알고리즘
Python
태그
알고리즘
python
Scrap
8 more properties
문제를 보자마자 정규표현식을 쓰면 쉽게 풀수 있겠구나 생각이 들었지만 정규표현식을 까먹어서 일단 다른 방식으로 풀다가 결국 찾아보고 정규표현식으로 푼 문제다. 정규표현식 사용법 까먹지말자!!!
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-__@@..||.'))
JavaScript
1단계 new_id소문자로 치환
2단계 소문자(a-z) 숫자(\d) -_. 가 아닌문자면([] ^) 빈칸으로 치환
\d 를 0-9로 바꿔도 된다.
3단계 .이(\.) 한번 이상 반복되면({2,}) . 하나로 치환 {1,} 은 + 와 같다.
{1,} 로 제출해도 정답처리되고 솔직히 하나 이상 반복이라는 말을 무슨소리인지 잘 모르겠다.
.이 하나면 . 으로 바꾸고 ..도 . 으로 바꾸는거라 .은 그냥 냅두던 말던 상관 없어서 결과가 같은거다.
*이라는 0번 이상 반복도 있다.
4단계 . 으로 시작(^\.) 하는것 또는 .으로 끝나는거(\.$) 는 공백으로 치환
(^\.)
문자 클래스([]) 안에서는 ^가 not 의 의미를 가진다. 즉 [^0-9] 은 숫자가 아닌 경우다.
5단계 생략
6단계 애초에 받을때 answer 로 슬라이싱해서 15 글자까지만 받음
7단계 answer += answer[-1: ]. answer의 마지막 글자를 끝에 붙인다.

re.sub(패턴, 교체되어질 문자열, 문자열, 최대 교체 수, 플래그)

sub는 문자열에 맞는 패턴을 2번째 인자(교체할 문자열)로 교체합니다. 최대 교체 수를 지정하면 문자열에 맞는 패턴을 교체할 문자열로 교체하고 그 수가 도달하면 더이상 교체하지 않습니다.
import re print(re.sub('a', 'z', 'ab')) print(re.sub('a', 'zxc', 'ab')) print(re.sub('a', 'z', 'aaaab')) print(re.sub('a', 'z', 'aaaab', 1)) # zb # zxcb # zzzzb # zaaab
Plain Text
점프투 파이썬 정규표현식시작하기