[문제 링크]
https://programmers.co.kr/learn/courses/30/lessons/72410
[소스코드]
| import re |
| |
| def solution(new_id): |
| st = new_id |
| st = st.lower() |
| st = re.sub('[^a-z0-9\-_.]', '', st) |
| st = re.sub('\.+', '.', st) |
| st = re.sub('^[.]|[.]$', '', st) |
| st = 'a' if len(st) == 0 else st[:15] |
| st = re.sub('^[.]|[.]$', '', st) |
| st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))]) |
| return st |
정규표현식
- 사용법 (
import re
필요)
| import re |
| |
| regex=re.compile('[a-z\') |
| |
| |
| ex = re.sub('[^a-z0-9\-_.]', '', st) |
| ex = re.match('[a-z]+', "python") |
- 정규식 객체 생성 > 생성된객체.method를 이용하는 방법과 re.메소드를 바로 이용하는 방법이 있는데 본질적으로 같으므로 라인이 짧은 메소드를 바로 이용하는 쪽을 선택하자.
- 메소드
re.match(pattern,string)
: re.match object 반환 (없으면 None 반환), 첫단어가 일치해야한다.
re.search(pattern,string)
: re.match object 반환, 문장 전체에서 찾아준다.
re.match
나 re.search
에서 반환되는 객체에 .group()
을 취해줘야 결과를 얻을 수 있다.
re.findall(pattern,string)
: 전부 찾아서 리스트로 반환해준다.
re.finditer(pattern,string)
: 제너레이터로 반환해준다.
re.sub(pattern,대체할문자,string)
: replace와 비슷하게 동작, 타겟을 여러개로 정할 수 있다는 장점이 있음.
| import re |
| |
| |
| m=re.match('[a-z]+',"python111love") |
| print(m) |
| print(m.group()) |
| m=re.match('[a-z]+',"111love") |
| print(m) |
| |
| |
| print(re.search('[a-z]+',"111love222python").group()) |
| |
| |
| print(re.findall('[a-z]+',"11python22love33google")) |
| |
| |
| |
| for i in (re.finditer('[a-z]+',"11python22love33google")): |
| print(i.group()) |
| |
| |
| |
[풀이]
- 소문자로 전환
- -,_,.제거
- .이 2번 이상 쓰인 부분 1번만
- 시작, 끝 . 제거
- 빈문자나 초과 문자 처리.
- 마침표 한번 더 제거.
- 길이가 2 이하일 경우 마지막자리 덧붙이기
댓글을 사용할 수 없습니다.