728x90
반응형
<문제>
https://programmers.co.kr/learn/courses/30/lessons/72410
<코드>
import re
def solution(new_id):
new_id = new_id.lower()
new_id = re.sub(r'[^a-z0-9-_.]', '', new_id)
new_id = re.sub('\.+', '.', new_id)
new_id = new_id.strip('.')
if new_id == '':
new_id += 'a'
if len(new_id) >= 16:
new_id = new_id[:15]
new_id = new_id.rstrip('.')
if len(new_id) <= 2:
while len(new_id) <= 2:
new_id += new_id[-1]
return new_id
<NOTE>
문자열 대체 re.sub(pattern, new_text, string)
string에서 대체하고자하는 pattern을 찾아 new_text로 대체
- 정규 표현식 추가 설명
- r'[pattern]'에서 r은 특수문자 기능을 무시하고 문자 그대로 판단한다는 의미이다.
- ex) 백슬래쉬는 escape기능을 하지만 r'[pattern]'안에서는 문자 그대로 백슬래쉬를 의미한다.
- 'pattern+'에서 +는 pattern이 반복되는 것을 찾는다는 의미이다.
- 위 코드에서는 '\.+'를 사용하여 마침표가 여러번 반복된 것을 찾았는데, r'[pattern]'을 사용해서 r'[.]+'로 표현할 수 있다.
- replace를 사용해서 replace('..', '.')로 처리하면, 마침표가 3번 반복된 경우는 처리 결과가 여전히 2번 반복된 형태이다. replace를 사용해서 '..'이 없을 때까지 반복해서 처리할 수도 있지만, 개수를 특정하지 않아도 되는 정규식의 +를 활용할 수 있다.
- [^pattern]에서 괄호 안의 ^는 pattern을 제외한 나머지 문자를 찾는다는 의미이다. (not의 의미)
- 문자열 처음이나 끝에 마침표가 있는 것을 찾기 위해, strip()을 사용하였다. 이것을 정규 표현식으로 나타내면 '^[.]|[.]$'로 나타낼 수 있다. 괄호 밖의 ^는 시작값을 의미하며 pattern앞에 붙이고, $는 끝값을 의미하며 pattern 뒤에 붙인다.
- r'[pattern]'에서 r은 특수문자 기능을 무시하고 문자 그대로 판단한다는 의미이다.
728x90
반응형
'알고리즘 > 문자열' 카테고리의 다른 글
#16 [파이썬] 백준 1543문제: 문서 검색 (0) | 2021.04.21 |
---|---|
#5 [파이썬] 백준 1427번 문제: 소트인사이드 (0) | 2021.03.02 |
#4 [파이썬] 백준 1316번 문제: 그룹 단어 체커 (0) | 2021.03.02 |
#3 [파이썬] 백준 11719번 문제: 그대로 출력하기 2 (0) | 2021.03.02 |
#2 [파이썬] 백준 11721 번 문제: 열 개씩 끊어 출력하기 (0) | 2021.03.02 |
댓글