정규표현식은 특정 패턴을 갖는 문자열을 '검색', '치환', '제거'하는 기능을 지원하는 기능입니다.
import re
먼저, re 패키지를 불러 옵니다.
re 모듈의 sub 함수(substitute) 파라미터 입력방식은 아래와 같습니다.
# re.sub(pattern, repl, string, count)
re.sub(pattern = "변환 전 문자", repl = "변환 후 문자", \
, string = "문자열", count = 변환할 횟수)
count 파라미터는 optional input 이기 때문에 따로 입력하지 않으면 default 값으로 pattern이 보이지 않을 때까지 문자열을 치환합니다.
참고로 문자열 내 pattern은 좌측에서 우측 순으로 치환됩니다.
print(re.sub(pattern = "apple", repl = "banana", \
string = "applebanana apple apple banana appleMango", \
count = 3))
bananabanana banana banana banana appleMango
apple이라는 패턴이 4번째 발견된 "appleMango" 내 "apple"이라는pattern 이 치환되지 않은 것을 볼 수 있습니다.
특정 문자는 어떻게 제거할까요?
이 역시 문자열 치환의 개념으로 해결할 수 있습니다.
바로 특정 문자를 공백으로 치환하면 되죠.
print(re.sub("apple", "", \
"applebanana apple apple banana appleMango", \
count = 3))
*참고: sub 함수는 파라미터의 이름은 생략하고 값만 입력해 주어도 무방합니다.
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 파라미터에 입력하면 일일이 찾을 패턴을 입력할 필요가 없습니다.
example_string = "이 string은 1번째 example 입니다ㅎㅎ."
print(re.sub('[^ㄱ-ㅎ가-힣]', '', example_string))
이 은 번째 입니다ㅎㅎ
패턴으로 한글 외의 모든 문자를 찾을 수 있도록 ^ 기호를 앞에 붙여 주었습니다.
이에 알파벳뿐만 아니라 숫자, 구두점까지 한글 외 문자에 해당하는 패턴을 모두 찾고 이를 정상적으로 삭제한 것을 확인할 수 있습니다.