Python 정규 표현식(re.sub)을 이용한 문자열 치환 방법 및 예제

파이썬에서 문자열을 치환해주는 메서드로 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)

 

결과

***-****-**** Kim

011-1234-5678 Lee

016-1234-5678 Han

 

실행 결과를 보면 첫 번째 전화번호가 *로 치환되어 표시되었습니다.

첫 번째 줄만 치환된 이유는 정규 표현식에서 문자열 선두라는 의미를 가진 ^를 지정했기 때문입니다.

두 번째 줄부터는 문자열 선두로 인정되지 않기 때문에 두 번째 줄부터 변환이 안되었습니다.

모든 줄을 치환하고 싶은 경우에는 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을 사용하여 여러 줄에 데이터도 모두 치환이 되는 것을 확인했습니다.

  

정리

파이썬에서 정규 표현식을 사용하여 문자열을 치환하는 방법을 확인했습니다.

정규 표현식을 사용하면 문자열 검색이나 변환등 많은 기능을 쉽게 작성할 수 있습니다.

다른 언어에서도 정규 표현식은 유용하게 사용되기 때문에 어느 정도 공부하는 것이 좋습니다.

댓글