잔머리 엑셀 / REGEXREPLACE 함수를 사용해보자.md

REGEXREPLACE 함수를 사용해보자

조회

코딩 좀 해보신 분들은 들어봤을 정규식을 활용해서 뭔가 하는 함수이다. 정규식이 뭔지 설명할때 아 그빵 뭐였지 **빵 이런 식으로 와일드카드 써서 검색하는? 뭐 특정 패턴을 인식하는? 뭐 그런 거라고 설명을 하는데, 실제로 코딩할때 정규식 패턴을 이용해서 유효성 검사를 한다. 전화번호는 000-0000-0000 형식이니까 숫자 세개, 다음에 네개, 또 다음에 네개로 패턴을짜면 되고 이메일은 아이디 골뱅이 도메인(뭐시기닷컴, 뭐시기오알지) 구별할 수 있게 패턴을 짠다.


여기 전화번호가 있다. 여기서 가운데 숫자를 REGEXREPLACE 함수를 이용해 ****로 바꿔볼거다. 

 

=REGEXREPLACE(C2,"-[0-9]+-","-****-")를 입력하면 된다. 롸? 이게 왜 이렇게 되나요? 정규식 패턴을 짤 때는 토큰들을 조합해서 쓰게 되는데, [0-9]는 0부터 9까지(숫자)를 의미한다. 그 옆에 +가 붙어있으니까 하나 [0-9]+는 하나 이상의 숫자가 된다. 양 옆의 -는 가운데 네 자리만 *로 대체하기 위해서 넣은거다. 저걸 뒤에만 넣으면 010까지 같이 *로 변환되고, -를 다 빼면 전화번호 자체가 가려진다. 

 

파일이 개발살나서 이름에 특수기호가 섞여버린 상황이다. 사실 파일이 개발살나면 열리는것만 해도 기적이고 폰트 지원도 안되는 뭐 뷁 이런거 나오지만 넘어가자. 여기서 특수문자를 어떻게 지우나요? 하나하나 지워요?

 

한글에 대응하는 정규식 토큰을 쓰면 된다. =REGEXREPLACE(B2,"[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣| ]","")에서 [ㄱ-ㅎ|ㅏ-ㅣ|가-힣]이 한글에 대응하는 토큰이고 ㄱ 앞에 붙어있는 ^는 얘네 빼고라는 의미이다. 저 작대기는 쉬프트+\ 하면 입력할 수 있는 막대기인데, 의미는 OR이다. 그니까 대괄호 안에 있는 건 이거 혹은 이거 혹은 이거 빼고라는 얘기. 근데 뒤에 공백은 왜 들어갔냐면 로버트 한 이름이 공백이 있어서... 

 

데이터에 영문이 섞여있을 때 토큰을 저렇게 짜면 영문도 공백처리 된다. 그니까 저게 내가 예시만 쓴 게 아니라 함수까지 자동완성한 게 맞음... 그럼 영어는 어떻게 하냐고?

 

뭘 어째요 토큰 두개 추가해야지... 대괄호 안에 a-z랑 A-Z를 추가해서 =REGEXREPLACE(B2,"[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣|a-z|A-Z| ]","")로 써 주면 된다. [a-z]는 영어 소문자, [A-Z]는 영어 대문자. 

 

이건 일단 이메일이다. 예시니까 저기다 뭐 보낼 시도는 하지 말자. 이 이메일로 뭐 할거냐면, REGEXREPLACE 함수를 이용해서 이메일의 아이디와 도메인을 분리할거다. 아이디에는 골뱅이 앞에 있는 것, 도메인에는 골뱅이 뒤에 있는 게 들어갈 예정이다.

 

아이디는 =REGEXREPLACE(B2,"@[a-z|A-Z|.]+","")으로 뒷부분을 떼버렸다. 골뱅이랑 영어+닷까지 대체된거 맞다. 혹시 도메인에 숫자가 포함된 경우가 있다면 토큰을 [0-9|a-z|A-Z]로 하자.

 

도메인은 아이디만 뗴버리면 된다. =REGEXREPLACE(B2,"[0-9|a-z|A-Z]+@","")로 떼버리면 아이디에 숫자가 포함될때도 알아서 대체될 것이다. 도메인이라면 몰라도 보통 아이디에는 숫자 들어가는 경우가 꽤 있으므로... 


파이썬이나 다른 프로그래밍 언어에서는 정규식을 쓸 때 \d(숫자) \s(공백) 이런 식으로 백슬래시를 붙여서 쓰는 경우가 있다. 그리고 글자 수를 {3} {4} 이런 식으로 중괄호 안에 쓰는데, 내가 그것도 해봤더니 된다. 그러니까 맨 처음에 예시로 들었던 전화번호 가운데만 ****로 바꾸는 패턴이 =REGEXREPLACE(C2,"-[0-9]+-","-****-")도 되고 =REGEXREPLACE(C2,"\d{4}-","****-")도 된다는 얘기. 뒤에 있는 건 숫자 네자리로 지정한건데, 뒤에 하이픈이 없으면 전화번호가 010 빼고 다 ****로 바뀐다. 

댓글

홈으로 돌아가기

검색 결과

"search" 검색 결과입니다.