Python - 여러 개의 문자열을 한꺼번에 바꾸기 (re.sub, 정규 표현식 문자열 바꾸기)

반응형

 

replace 함수로 문자열 변경

파이썬에서 문자열을 바꾸기 위해서는 가장 일반적인 replace 함수가 있다.

그러나 replace 함수는 여러 개의 문자열을 한 번에 바꿀 수 없고 여러 번 사용해야 한다.

예를 들어보자.

['abc'], ['def'] 이라는 문자열이 있다. 나는 이 문자열에서 알파벳 abc def만 남기고 싶다.

이 것을 replace 함수로 변경하려면 다음과 같다.

### replace 함수로 여러 개의 문자열 변경하기 ###
# 문자열 저장
strVar = '[\'abc\', \'def\']'
# 문자열 바꾸기
strVar = strVar.replace('[', '')
strVar = strVar.replace(']', '')
strVar = strVar.replace('\'', '')
strVar = strVar.replace(',', '')
# 출력
print(strVar)
>>> abc def

 

문자열이 원하는 문자열로 나올 수 있도록 가공되었다.

그러나 변경해야할 사항들이 점점 추가 될 경우,

replace 함수를 계속 사용하여 코드를 짜기에는 양이 너무나도 많아진다.


정규 표현식으로 한 번에 변경할 수는 없을까?

replace 함수에서는 정규 표현식을 사용할 수 없다.

즉, 정규 표현식을 이용하여 변경할 여러 개의 문자열을 하나의 replace 함수에서 처리할 수 없다는 뜻이다.

정말 정규 표현식을 사용해서 한꺼번에 변경할 수 있는 방법은 없는 것일까?

아니다. 이런 경우에는 사용되는 re.sub 함수가 존재한다.

우선 re 모듈을 간단히 설명하자면, 정규식(정규 표현식) 일치 연산을 제공하는 모듈이다.

re 모듈 내에서 정규 표현식을 사용하여 다른 문자열로 대체할 수 있는 함수가 존재한다.

그 역할을 하는 것이 바로 re.sub 함수이다.

re.sub 함수는 문자열에서 정규 표현식과 일치하는 부분에 대해서 다른 문자열로 대체하는 기능을 갖는다.

 

[ re.sub 기본 문법 ]

import re

re.sub(바꿀문자열, 대체문자열, 원본문자열)

### replace 함수와의 비교 ###
# 원본문자열.replace(바꿀문자열, 대체문자열)
  • 바꿀문자열 : 변경할 문자열을 입력한다. 해당 부분에는 정규 표현식을 사용할 수 있다.
  • 대체문자열 : 변경할 문자열이 대체될 문자열을 입력한다.
  • 원본문자열 : 변경 대상이 되는 문자열을 입력한다.

 

[ re.sub 사용 예시 ]

위에서 replace 함수로 바꿨던 문자열을 re.sub 함수를 이용하여 변경해보자.

  • re.sub 함수를 사용하려면 정규 표현식을 다루는 re 모듈을 먼저 호출하여야 한다.
import re

### re.sub 함수로 정규 표현식을 사용한 문자열 변경하기 ###
# 문자열 저장
strVar = '[\'abc\', \'def\']'
# 정규 표현식을 사용하여 문자열 일괄 바꾸기
regexVar = re.sub(r'[\[\]\'\,]', '', strVar)
# 출력
print(regexVar)
>>> abc def

정규 표현식 문법

정규 표현식을 작성할 때 도움이 될만한 표를 가져왔다.

(출처 : 위키독스 - 딥 러닝을 이용한 자연어 처리 입문)

  • 정규 표현식에 사용되는 문법 중 특수 문자
특수 문자 설명
. 한 개의 임의의 문자를 나타냅니다. (줄바꿈 문자인 \n는 제외)
? 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 또는 1개)
* 앞의 문자가 무한개로 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 이상)
+ 앞의 문자가 최소 한 개 이상 존재합니다. (문자가 1개 이상)
^ 뒤의 문자열로 문자열이 시작됩니다.
$ 앞의 문자열로 문자열이 끝납니다.
{숫자} 숫자만큼 반복합니다.
{숫자1, 숫자2} 숫자1 이상 숫자2 이하만큼 반복합니다. ?, *, +를 이것으로 대체할 수 있습니다.
{숫자,} 숫자 이상만큼 반복합니다.
[ ] 대괄호 안의 문자들 중 한 개의 문자와 매치합니다. [amk]라고 한다면 a 또는 m 또는 k 중 하나라도 존재하면 매치를 의미합니다. [a-z]와 같이 범위를 지정할 수도 있습니다. [a-zA-Z]는 알파벳 전체를 의미하는 범위이며, 문자열에 알파벳이 존재하면 매치를 의미합니다.
[^문자] 해당 문자를 제외한 문자를 매치합니다.
l AlB와 같이 쓰이며 A 또는 B의 의미를 가집니다.

 

  • 정규 표현식 문법에 역 슬래쉬(\)를 이용하여 자주 쓰이는 문자 규칙들
문자 규칙 설명
\\\ 역 슬래쉬 문자 자체를 의미합니다
\\d 모든 숫자를 의미합니다. [0-9]와 의미가 동일합니다.
\\D 숫자를 제외한 모든 문자를 의미합니다. [^0-9]와 의미가 동일합니다.
\\s 공백을 의미합니다. [ \t\n\r\f\v]와 의미가 동일합니다.
\\S 공백을 제외한 문자를 의미합니다. [^ \t\n\r\f\v]와 의미가 동일합니다.
\\w 문자 또는 숫자를 의미합니다. [a-zA-Z0-9]와 의미가 동일합니다.
\\W 문자 또는 숫자가 아닌 문자를 의미합니다. [^a-zA-Z0-9]와 의미가 동일합니다.

출처

반응형