하루한줄 코딩일기

[Python] 정규표현식 re.sub을 이용한 문자열 치환하기 본문

Languages./Python

[Python] 정규표현식 re.sub을 이용한 문자열 치환하기

jjuha 2022. 2. 16. 15:30

정규표현식 re.sub()

파이썬에서 정규 표현식을 활용할 땐 re 모듈을 사용한다. 이 중 sub 메소드는 정규식을 이용해 문자열을 치환하는 방법이다.

형식은 다음과 같다.

re.sub(pattern, replace, text)
: text 중 pattern에 해당하는 부분을 replace로 대체한다.

 

다양한 정규식 패턴 표현

[출처] 다양한 정규식 패턴 표현

 

활용 예시

같은 문제를 정규식을 사용하지 않고(위), 그리고 사용하고(아래) 작성한 코드이다. 정규식을 활용한 풀이가 훨씬 간단하고 가독성이 좋다는 것을 확인할 수 있다.    ... 문제보기

def solution(new_id):
    answer = ""
    #1단계
    new_id = new_id.lower()
    #2단계
    for n in new_id:
        if n.islower() or n.isdigit() or n in ['-','_','.']:
            answer+=n
    #3단계
    while ".." in answer:
        answer = answer.replace('..','.')
    #4단계
    if answer.startswith('.'):
        answer = answer[1:]
    if answer.endswith('.'):
        answer = answer[:-1]
    #5단계
    if answer == "":
        answer = "a"
    #6단계
    if len(answer) >= 16:
        answer = answer[:15]
        if answer.endswith('.'):
            answer = answer[:-1]
    #7단계
    while len(answer) <= 2:
        answer += answer[-1]
    return answer
import re
def solution(new_id):
    st = new_id
    st = st.lower()								#1단계
    st = re.sub('[^a-z0-9\-_.]', '', st)					#2단계
    st = re.sub('\.+', '.', st)							#3단계
    st = re.sub('^[.]|[.]$', '', st)						#4단계
    st = 'a' if len(st) == 0 else st[:15]					#5&6단계
    st = re.sub('^[.]|[.]$', '', st)						#6단계
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])#7단계
    return st
2단계 알파벳 소문자(a-z), 숫자(0-9), 빼기/밑줄/마침표(\-_.)가 아닌(^) 경우, ''로 대체하여 제거한다.
3단계 마침표(\.)가 반복될(+) 경우, '.'로 대체한다.
4단계/6단계 마침표로 시작(^[.]) 혹은(|) 마침표로 끝날([.]$) 경우, ''로 대체하여 제거한다.

 

Comments