자동차 등록번호 마스킹할 때 질문 있습니다
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. 다 커버하지 않더라도 문자열을 수정할 때의 기준점이 반드시 있어야 하는지
궁금합니다.