본문 바로가기

Aiffel_learning/Python

2025.5.21 re모듈(re.sub, re.split)을 이용한 문자열 데이터처리

파이썬 퀘스트2번을 수행하면서 알파벳을 제외한 모든 특수문자를 제거해야하는 데이터처리가 필요했다!

우리팀은 매우 수동으로 텍스트파일을 다 읽으면서 모든 특수문자를 다 넣어주었는데;;;;;

replacetext = text.replace('.', ' ').replace(',', ' ').replace('?', ' ').replace("'", ' ').replace('-', '').replace('!', ' ').replace('/', ' ')\
.replace('^', ' ').replace('%', ' ').replace('\n', ' ').replace('\\', ' ').replace('(', ' ').replace(')', ' ')

 

심지어 여기서도 \ 를 없애는 과정에서 \\ 로 입력해주어야한다는것을 배웠다.

다른팀은 어떻게 했는지 공유하는데 re모듈을 사용하여 기깔나게 작성하신 것을 보고 공부한걸 올려본다,

re.sub() 함수

re.sub (검색할 문자열, 대체할 문자열, 대상 문자열, (선택사항) count = 0, (선택사항) flags = 0)

정규표현식은 해당 글을 참조.

https://euthelearner.tistory.com/11

 

검색할 문자열

  • r'알파벳' : 특정 알파벳
    • 앞에 r을 붙여주는 이유 : 해당 문자열을 raw string으로 취급하여 escape character(\)을 문자 그대로 처리함. \n, \t등 \가 자주 쓰이기 때문에 웬만해선 붙여주는게 좋음
  • '[A-z]' : 알파벳 대문자, 소문자 전체(그러나  [ \ ] ^ _  가 끼여있는 함정이 있음!)
import re

avengers_txt = "Avengers! game.... for me, It Wasn't // good\enough."

replaced = re.sub('[^A-z]', ' ', avengers_txt)
print(replaced)
>>> Avengers  game     for me It Wasn t    good\enough

이 경우, \ 가 사라지지 않는 버그가 발생함.

  • '[^A-Za-z]' : 알파벳 제외 나머지 모든 문자
  • [\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]  :  모든 특수문자를 나타냄!
re_replaced = re.sub('[^A-Za-z]', ' ', avengers_txt)
print(re_replaced)
>>> Avengers  game     for me It Wasn t    good enough 
# 이렇게 알파벳만으로 설정하던지

rere_replaced = re.sub('[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]', ' ', avengers_txt)
print(rere_replaced)
>>> Avengers  game     for me It Wasn t    good enough
# 아니면 이렇게 특수문자들만 골라서 설정해주기
  • '[^\w\s]' : 알파벳 문자, 숫자, 공백 이외의 모든 문자
    • \w : 알파벳 문자와 숫자 그리고 밑줄(_)
    • \s : 공백 문자
rerere_replaced = re.sub(r'[^\w\s]', ' ', avengers_txt)

 

대체할 문자열 : 문자열일 수도 있고, 치환된 결과를 만들기 위한 함수일 수도 있음

def replace_match(match):
    return match.group(0).upper()

result = re.sub('검색할문자열', replace_match, text)
print(result)

이것 같은 경우는 검색할 문자열에서 첫번쨰 글자들을 Capitalized 시키는 함수이군!

 

count : 대체하는 과정을 몇 번 반복할 것인지

  • count = 0  : 디폴트값, 무제한으로 대체
  • count = 1  : 대체하는 과정을 한번만 진행

flags 

  • re.IGNORECASE : 대소문자 구분하지 않고 실행
  • re.MULTILINE : 여러줄에서 각 줄의 시작과 끝을 인식
  • re.DOTALL : 줄바꿈 문자를 포함하여 모든 문자와 일치시키기

 

re.split() 함수

한 개 이상의 연속된 공백이 있는 상태에서 split(' ')을 사용하니 다른 공백이 분할되어 결과로 출력되는것이 확인됨

연속되는 공백을 하나의 공백으로 인식하는 함수는 다음과 같다.

splittext = re.split(r'\s+',replacetext)
  • '\s+' : 하나 이상의 연속되는 공백을 하나의 공백으로 인식

 

'Aiffel_learning > Python' 카테고리의 다른 글

Enum 모듈  (0) 2024.05.23