강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

최원준141124님의 프로필 이미지
최원준141124

작성한 질문수

공공데이터로 파이썬 데이터 분석 시작하기

[15/21] 이메일, 자동차 등록번호 정규표현식으로 마스킹 하기

자동차 등록번호 마스킹

작성

·

640

1

자동차 등록번호 마스킹할 때 질문 있습니다
32 가 1234 가 있을 때 '3*가1**4'로 표현하기 위해서 선생님께서
re.sub('([0-9])([가-힣])(\d)(\d{2})(\d)', r'*\2\3**\5', car_num)으로 작성하셨었는데요
 
처음에 작성하시는 과정에서 ([0-9])([가-힣])까지 쓰셨을때 이렇게 작성하면 문자 앞에 있는 숫자 한자리수가 변한다고 하셨었는데요
이게 어떻게 가능한건지 궁금합니다. 저는 sub메소드가 인식할때 (car_num이 32가1234라고 가정할 경우), ([0-9])는 가장 첫 숫자로 인식할 것이라고 생각했었는데요
정말로 실행해보니 한글 앞에 숫자인 2를 *로 바꾸더라구요
 
그래서 제가 이해한 바로는
 
([0-9])([가-힣])(\d)(\d{2})(\d)'
 
r'*\2\3**\5'
두 식 모두 번호판의 첫 자리 숫자인 3은 포함하지 않고 작성한 것 같다고 생각이 들었습니다. (가장 마지막 자리인 (\d)와 \5를 똑같이 지워도 같은 결과가 나왔는데 
 
컴퓨터가 알아서 ([0-9])([가-힣])(\d)(\d{2})(\d)이 car_num과 일치하는 위치를 찾아서 바꿔주는건가요?
가령 여기서는 [가-힣]이 한글자밖에 없어서 그 위치를 기준으로 바꿔주는건가요???
 
제가 따로 이렇게 기준을 알 수 없는 식인데 앞뒤를 생략한 re.sub식을 적어봤는데 그건 또 오류가 나던데 제가 이해한게 맞는지 궁금합니다
 
 
질문이 너무복잡한 것 같은데 정리하자면,,
1. re.sub을 작성할때 꼭 바꾸고자 하는 문자열을 다 커버하지 않아도 되는지
2. 다 커버하지 않더라도 문자열을 수정할 때의 기준점이 반드시 있어야 하는지
궁금합니다.

답변 1

1

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요.

 

1) 일부만 일치하게 되면 일치하는 부분을 찾아 해당 부분만 변경하게 됩니다.

2) 패턴을 찾아서 변경하기 때문에 기준점보다는 어떤 패턴인지가 중요합니다. 예를 들어 이메일 주소라면 중간에 @ 이라는 특수문자가 들어가고 도메인 주소에 . 이 들어간다는 식으로 어떤 패턴인지를 정규식으로 구성합니다.

최원준141124님의 프로필 이미지
최원준141124

작성한 질문수

질문하기