파이썬에서 문자열을 치환해주는 메서드로 replace가 있습니다.
이번에는 replace 메서드로 문자열을 치환하는 방법이 아닌 정규 표현식을 이용하여 문자열을 치환해보도록 하겠습니다.
정규 표현식 문자열 치환
re.sub(정규 표현식, 대상 문자열 , 치환 문자)
정규 표현식 - 검색 패턴을 지정대상 문자열 - 검색 대상이 되는 문자열치환 문자 - 변경하고 싶은 문자
정규 표현식 문자열 치환 예제
import re text = "I like apble And abple" text_mod = re.sub('apble|abple',"apple",text) print (text_mod)
결과
I like apple And apple
re.sub를 사용하기 위해서는 먼저 re 모듈을 import 해야 합니다.
변수 text에 apble과 abple라는 오타를 설정했습니다.
apble과 abple를 re.sub를 사용하여 apple로 변경하도록 했습니다.
정규 표현식에 기호 | 를 사용하여 검색 문자를 여러개 설정할 수 있습니다.
정규 표현식을 사용한 예제를 몇 개 더 살펴보겠습니다.
전화 번호를 *로 변환
전화번호와 같은 개인 정보 데이터를 표시하는 경우 *로 변환해서 화면에 표시해야 하는 경우가 있습니다.
이러한 경우에도 정규 표현식을 사용하여 간단하게 치환할 수 있습니다.
예를 들어 아래와 같은 데이터가 있다고 가정하겠습니다.
010-1234-5678 Kim
011-1234-5678 Lee
016-1234-5678 Han
전화번호를 *로 치환해보도록 하겠습니다.
정규 표현식 예제1
import re text = """\ 010-1234-5678 Kim 011-1234-5678 Lee 016-1234-5678 Han """ # 정규 표현식 사용 치환 text_mod = re.sub('^[0-9]{3}-[0-9]{4}-[0-9]{4}',"***-****-****",text) print (text_mod)
결과
실행 결과를 보면 첫 번째 전화번호가 *로 치환되어 표시되었습니다.
첫 번째 줄만 치환된 이유는 정규 표현식에서 문자열 선두라는 의미를 가진 ^를 지정했기 때문입니다.
두 번째 줄부터는 문자열 선두로 인정되지 않기 때문에 두 번째 줄부터 변환이 안되었습니다.
모든 줄을 치환하고 싶은 경우에는 MULTILINE을 지정해줘야 합니다.
지정하는 방법은 sub를 사용할 때 파라미터를 하나 추가해주면 됩니다.
MULTILINE 사용 예제
import re text = """\ 010-1234-5678 Kim 011-1234-5678 Lee 016-1234-5678 Han """ # flags=re.MULTILINE 지정 text_mod = re.sub('^[0-9]{3}-[0-9]{4}-[0-9]{4}',"***-****-****",text, flags=re.MULTILINE) print (text_mod)
결과
- **-****-**** Kim
- **-****-**** Lee
- **-****-**** Han
MULTILINE을 사용하여 여러 줄에 데이터도 모두 치환이 되는 것을 확인했습니다.
정리
파이썬에서 정규 표현식을 사용하여 문자열을 치환하는 방법을 확인했습니다.
정규 표현식을 사용하면 문자열 검색이나 변환등 많은 기능을 쉽게 작성할 수 있습니다.
다른 언어에서도 정규 표현식은 유용하게 사용되기 때문에 어느 정도 공부하는 것이 좋습니다.