• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

자동차 등록번호 마스킹

22.01.12 14:39 작성 조회수 403

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