본문 바로가기

[직장인이 알아두면 좋은 파이썬] 정규표현식으로 전화번호 뒷자리를 ####으로 바꾸기

ironwhale 2022. 10. 2.

파이썬을 처음 접하는 분들이라면 아마도 점프 투 파이썬이란 책에 대해 알고 계실거라 생각합니다. 이 책은 위키독스라는 사이트를 통해 무료로 공개되어 있어서 우선 이 사이트를 통해 접하고 저처럼 책을 구매하신 분들도 있을것 입니다.

그 중 이 책만의 특징적인 부분은 바로 정규표현식이라는 독특한 문법에 대해 설명하고 있는 책입니다. 

 

이 정규 표현식을 활용하면 주민번호 뒷자리나, 전화번호 뒷자리를 손쉽게 바꿀수 있습니다. 특정한 조건에 맞는 텍스트를 추출하고 바꾸고 하는데 활용할 수 있습니다. 

 

오늘은 전화번호 뒷에 4자리를 ####으로 바꾸는 방법을 소개하고 추후 왜 이렇게 하는지에 대해 설명하도록 하도록 하겠습니다. 


전화번호 뒷자리를 ####으로 바꾸기

필요한 라이브러리 import

import re

파이썬에서 정규 표현식을 사용하기 위해서는 위에 있는 라이브러리만 임포트 해주면 됩니다. 

조건 입력하기 

park 010-9999-9988 이렇게 저장된 데이터에서 전화번호 뒷자리를 ####으로 바꿔 보겠습니다. 

import re

## 찾을 조건 입력
p = re.compile("(?P<number>\d{3}[-]\d{4}[-])\d{4}")

 re.compile("정규표현식") <- 이것과 같이 사용하는데 핸드폰번호를  추출하기 위한 정규 표현식은 다음과 같습니다. 

핸드폰 번호 추출 정규 표현식 "(?P<number>\d{3}[-]\d{4}[-])\d{4}

\d는 숫자를 의미하고 {3}은 숫자의 갯수를 의미합니다. 즉 010을 추출하는 것이지요

[] 대괄호는 문자열을 의미하여 [-]은 -을 뜻합니다. 

쌍따옴표 안에 ()이런 괄호는 그룹핑을 의미하는데 이건 나중에 설명드리겠습니다. 지금은 "010-9999-" 을 그룹핑했다고 알고 넘어가시면 됩니다. 

 

이렇게 조건입력이 끝나고 이제 뒷자리를 ####으로 바꿔 보겠습니다. 

 

핸드폰번호 뒷자리를 ####으로 바꾸기 

result = p.sub("\g<number>####",phone_number)

 위에 생성한 정규 표현식 객체인 p에 있는 sub(바뀔 문자열, 바꾸고 싶은 문자열) 메소드를 사용하면 끝입니다. 

조건문에서 그룹핑한 것을 사용하기위해 \g<number>010-9999-을 불러오고 그 뒤에 ####을 추가하는 형태로 구현하였습니다. 그리고 두번째 매개변수로 내가 바꿔야할 글자를 입력하면 됩니다. 

 


전체코드 

import re

## 바꿀 전화번호 
phone_number = """
        park 010-9999-9988
        kim 010-9909-7789
        lee 010-8789-7768
"""


## 찾을 조건 입력
p = re.compile("(?P<number>\d{3}[-]\d{4}[-])\d{4}")
m = p.search(phone_number)
result = p.sub("\g<number>####",phone_number)
print(result)

결과 

   park 010-9999-####
   kim 010-9909-####
   lee 010-8789-####

마치며

정규표현식은 몬가 암호 같습니다. 하지만 차근차근 보다보면 그 암호문이 해독이 되는 날이 올것입니다.  사실 엑셀의 left와 text 함수를 이용해서 위와 같은 작업을 할 수 도 있습니다. 어쩌다 한번 평생 한번 하는 일이라면 엑셀로 하는것이 더 편할수도 있습니다. 하지만 매일, 매주, 매월 해야되는 작업이라면 파이썬으로 한번만 자동화를 하면 1초면 모든 업무가 끝날것입니다.

 


 참고 자료

https://wikidocs.net/1669

 

07장 정규표현식

필자는 정규 표현식을 이 책 《점프 투 파이썬》에 포함시켜야 할지 오랜시간 고민했다. 왜냐하면 정규 표현식은 꽤 오랜 기간 코드를 작성해 온 프로그래머라도 잘 모를 수 ...

wikidocs.net

 

 

댓글