import re
def solution(new_id):
# 1단계: 소문자로 변환
new_id = new_id.lower()
# 2단계: 허용되는 문자 제외 제거
new_id = re.sub(r"[^a-z0-9-_.]", "", new_id)
# 3단계: 연속된 마침표 하나로 치환
new_id = re.sub(r"\.+", ".", new_id)
# 4단계: 처음과 끝의 마침표 제거
new_id = new_id.strip(".")
# 5단계: 빈 문자열이면 "a" 대입
if len(new_id) == 0:
new_id += "a"
# 6단계: 길이가 16 이상이면 첫 15개 문자만 유지
if len(new_id) >= 16:
new_id = new_id[:15]
new_id = new_id.rstrip(".")
# 7단계: 길이가 2자 이하라면 마지막 문자를 반복하여 길이가 3이 될 때까지 추가
while len(new_id) <= 2:
new_id += new_id[-1]
return new_id
new_id = "...!@BaT#*..y.abcdefghijklm"
>> "bat.y.abcdefghi"
소문자로 변환: new_id의 모든 알파벳을 소문자로 변환한다.
허용되는 문자 제외 제거: 알파벳 소문자, 숫자, "-", "_", "."를 제외한 모든 문자를 제거한다.
연속된 마침표 하나로 치환: new_id에서 연속된 마침표를 하나로 치환한다.
처음과 끝의 마침표 제거: new_id의 처음과 끝에서 마침표를 제거한다.
빈 문자열이면 "a" 대입: 만약 new_id가 빈 문자열이라면, "a"를 대입한다.
길이가 16 이상이면 첫 15개 문자만 유지: new_id의 길이가 16 이상이면 처음부터 15개의 문자만 유지하고, 마지막 문자가 마침표인 경우에는 제거한다.
길이가 2자 이하라면 마지막 문자를 반복하여 길이가 3이 될 때까지 추가: new_id의 길이가 2자 이하라면 마지막 문자를 반복하여 길이가 3이 될 때까지 추가한다.
re.sub()
re.sub() 함수는 정규 표현식을 사용하여 문자열에서 패턴을 검색하고, 해당 패턴을 다른 문자열로 치환하는 기능을 제공한다. 여기서 re는 Python 내장 모듈 중 하나로, 정규 표현식(Regular Expression)을 사용하여 문자열 패턴 매칭과 처리를 수행하는 기능을 제공한다. re 모듈을 사용하려면 코드 상단에 import re 문을 추가해야 한다.
re.sub() 함수의 구문은 다음과 같다:
new_string = re.sub(pattern, repl, string)
re.sub() 함수는 string에서 pattern과 일치하는 부분을 찾아 repl로 지정된 문자열로 치환한다. 여러 개의 일치하는 패턴이 있는 경우, 모든 패턴이 치환된다. 반환값은 치환된 결과 문자열이다.
다음은 re.sub() 함수의 사용 예시이다:
import re
string = "Hello, 123 World!"
new_string = re.sub(r"\d+", "*", string)
print(new_string) #"Hello, * World!
replace()와 차이
replace()와 re.sub() 함수는 문자열에서 특정 패턴을 찾아 다른 문자열로 치환하는 데 사용되지만, 동작 방식과 사용 목적에서 차이가 있다.
replace() 함수는 문자열 내에서 특정 문자 또는 문자열을 다른 문자열로 단순히 대체하는 데 사용된다. 예를 들어, "Hello, World!".replace("World", "Python")는 문자열 "Hello, World!"에서 "World"를 "Python"으로 대체하여 "Hello, Python!"을 반환한다. replace()는 정규 표현식을 지원하지 않으며, 단순한 문자열 치환에 사용된다.
반면에 re.sub() 함수는 정규 표현식을 사용하여 더 복잡한 패턴을 검색하고 대체하는 데 사용된다. 이 함수는 문자열에서 패턴을 찾아 해당 패턴을 다른 문자열로 치환한다. 예를 들어, re.sub(r"\d+", "*", "Age: 25")는 문자열 "Age: 25"에서 숫자를 "*"로 대체하여 "Age: *"를 반환한다. re.sub()은 정규 표현식을 활용하여 패턴 매칭과 치환 작업을 수행하며, 더욱 다양한 패턴 처리에 유용하다.
따라서, 간단한 문자열 대체 작업에는 replace()를 사용하고, 정규 표현식을 활용하여 복잡한 패턴을 대체해야 할 때에는 re.sub()를 사용하는 것이 일반적인 패턴이다.