Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Today
Yesterday

Total
04-19 00:38
관리 메뉴

Hey Tech

[파이썬/NLP] 문자열 치환하기 (찾아바꾸기) 본문

AI & 빅데이터/자연어처리(NLP)

[파이썬/NLP] 문자열 치환하기 (찾아바꾸기)

Tony Park 2021. 2. 16. 09:48
728x90
반응형

안녕하세요, 오늘은 파이썬을 이용하여 문자열을 치환하는 방법에 대해 공유해 드립니다.

바로 시작하죠!

문자열 치환은 언제 사용할까?

위의 스크린샷처럼 한 번쯤은 한글, 워드, 엑셀 등에서 "찾아 바꾸기" 기능을 사용해 보셨을 것입니다.

문자열 치환은 이처럼 특정 문자를 찾아서 변경하거나 특정 문자를 찾아 삭제할 때 주로 사용합니다.

이 기능은 파이썬의 *정규표현식(regular expression)을 지원하는 re 모듈 내 sub 함수를 통해 이용할 수 있습니다.

 

*정규표현식이란?

정규표현식은 특정 패턴을 갖는 문자열을 '검색', '치환', '제거'하는 기능을 지원하는 기능입니다.

re 패키지

import re

먼저, re 패키지를 불러 옵니다.

re.sub

re 모듈의 sub 함수(substitute) 파라미터 입력방식은 아래와 같습니다.

# re.sub(pattern, repl, string, count)
re.sub(pattern = "변환 전 문자", repl = "변환 후 문자", \
			, string = "문자열", count = 변환할 횟수)

count 파라미터는 optional input 이기 때문에 따로 입력하지 않으면 default 값으로 pattern이 보이지 않을 때까지 문자열을 치환합니다.

참고로 문자열 내 pattern은 좌측에서 우측 순으로 치환됩니다.

예시1:  일치하는 문자를 특정 문자로 3회 치환하기

print(re.sub(pattern = "apple", repl = "banana", \
	string = "applebanana apple apple banana appleMango", \
	count = 3))

예시1의 결과

bananabanana banana banana banana appleMango

apple이라는 패턴이 4번째 발견된 "appleMango" 내 "apple"이라는pattern 이 치환되지 않은 것을 볼 수 있습니다.

예시2:  일치하는 문자를 3회 제거하기

특정 문자는 어떻게 제거할까요?

이 역시 문자열 치환의 개념으로 해결할 수 있습니다.

바로 특정 문자를 공백으로 치환하면 되죠.

print(re.sub("apple", "", \
	"applebanana apple apple banana appleMango", \
	count = 3))

*참고: sub 함수는 파라미터의 이름은 생략하고 값만 입력해 주어도 무방합니다.

예시2의 결과

banana banana appleMango

치환할 단어가 공백(empty)이기 때문에 앞서 살펴본 예시1과는 다르게 "apple"이라는 단어가 3회 나올 때까지 문자열에서 단어가 제거되어 출력되는 것을 볼 수 있습니다.

정규표현식 유용한 패턴

패턴 \ 표현 설명
[abcd] - a 또는 b 또는 c 또는 d
[a-d] - a 부터 d 까지
[a-z] - 알파벳 소문자 전체
[A-z] - 알파벳 대문자 전체
[a-zA-z] - 모든 알파벳
[ㄱ-ㅎ가-힣] - 모든 한글
[^ㄱ-ㅎ가-힣] - 모든 한글 외
[0-9] \d 모든 숫자
[^0-9] \D 숫자 외의 모든 문자 (^가 맨 앞에 위치)
[0-9a-zA-Z] \w 알파벳 및 숫자
[^0-9a-zA-Z] \W 알파벳 및 숫자 외의 모든 문자
\t \s 탭(tab) 문자
\n \s 개행(newline) 문자
\r \s 리턴(return) 문자
. - 모든 문자
| - |를 기준으로 좌우에 해당하는 문자 중 하나
(예를 들어 "apple | banana" 라고 입력하면 apple 또는 banana 중에 하나의 패턴이라도 일치하는지 여부 확인)

위 표와 같이 정규표현식의 유용한 패턴이 있습니다.

"패턴" 또는 "\ 표현" 칼럼 중 해당하는 값 하나를 정규표현식의 pattern 파라미터에 입력하면 일일이 찾을 패턴을 입력할 필요가 없습니다.

예시3: 한글 외 모든 문자 삭제하기

example_string = "이 string은 1번째 example 입니다ㅎㅎ."
print(re.sub('[^ㄱ-ㅎ가-힣]', '', example_string))

예시3의 결과

이 은 번째  입니다ㅎㅎ

패턴으로 한글 외의 모든 문자를 찾을 수 있도록 ^ 기호를 앞에 붙여 주었습니다.

이에 알파벳뿐만 아니라 숫자, 구두점까지 한글 외 문자에 해당하는 패턴을 모두 찾고 이를 정상적으로 삭제한 것을 확인할 수 있습니다.


포스팅에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.

그럼 즐거운 하루 보내시길 바랍니다 :)

고맙습니다.

 

 

728x90
반응형
Comments