https://programmers.co.kr/learn/courses/30/lessons/12950?language=python3
phone_number = "01033334444"
def solution1(phone_number) :
return "*" * len(phone_number[0:-4]) + phone_number[-4:]
print(solution1(phone_number)) # "*******4444"
문자열 + 문자열의 형태로 출력한다. 첫번째 문자열은 "*"을 곱해주는데 곱해주는 값은 len()함수에 phone_number를 슬라이싱하여 0~-4까지의 문자열이 되고 두번째 문자열은 -4~마지막 문자까지 되므로 뒤 4자리 수가 된다. 이 두 문자열을 더하여 출력한다.
phone_number = "01033334444"
import re
def solution2(phone_number):
p = re.compile(r'\d(?=\d{4})')
return p.sub("*", phone_number, count = 0)
print(solution2(phone_number)); # "*******4444"
- 정규표현식을 사용하기 위해 re모듈을 import한다.
- re모듈에서 직접가져오지 않고 미리 컴파일을 하기 위해 re.compile()메서드를 활용하여 정규식을 파라미터 값으로 할당하여 패턴 객체를 반환한다.
- 파라미터 값으로 할당된 정규식 중 r은 백슬래시 문자를 해석하지 않고 남겨두기 위해 r을 선두에 사용하고 \d는 [0-9]와 동일하게 숫자를 가리킨다. 또한 (?=...)는 뒤에 (?=...)가 오는 경우 성립되는 것을 의미한다. 여기서는 뒤에 숫자가 4개인 경우를 의미한다. 즉 뒤에 숫자가 4개가 오는 숫자열을 변경하게 되는 것이다.
- sub()메서드를 활용하여 문자를 치환한다. *로 치환되며 뒤에 숫자 4개는 변하지 않는다. 여기서 count는 count가 0인 경우는 전체를, 1이상이면 해당 숫자만큼 치환 된다.