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]와 의미가 동일합니다. |