기록하는삶
[파이썬/python] 정규표현식을 이용해 괄호와 괄호 안의 내용 삭제하기 본문
문자열 데이터를 다루다 보면, 괄호 안에 불필요하게 표기된 정보들을 삭제하고 싶을 때가 있다. 아래 코드는 re 모듈을 이용하여 특정 문자열에서 불필요한 괄호와 괄호 안의 정보들을 삭제할 수 있는 코드다.
import re
pattern = r'\([^)]*\)'
x = '이건 (괄호 안의 불필요한 정보를) 삭제하는 코드다.'
text = re.sub(pattern=pattern, repl='', string= x)
text
text.split()
입력받은 text에서 괄호와 괄호 안의 정보를 제거하며, .split()을 이용해 단어만 모아 리스트로 반환할 수도 있다. 이를 이해하기 위해서는 정규표현식의 일부를 이해해야한다.
r'문자열'
\, (), % 등 문자열에는 예약어로 특정 기능을 수행하는 문자(메타문자 _ meta characters)들이 있다. 예약어를 그 본래 기능이 아닌 문자 그대로 활용하고 싶다면, 문자열 앞에 r''로 표기함으로써 그 뒤에 오는 문자열의 경우 예약어를 무시하고 문자 그대로 해석하겠다고 표현할 수 있다.(raw 문자열)
문자열 치환에 사용되는 함수 re.sub()는 세 개의 parameter를 받는다.
① pattern: 어떤 문자를 치환할 것인가
-> 이때 pattern에 정규표현식이 들어갈 수도 있다.
② repl: 어떤 문자로 치환할 것인가
-> 이때 repl에 함수가 들어갈 수도 있다.
③ string: 어떤 문자열에 적용할 것인가
즉, re.sub() 함수는 ③의 문자열을 받아서 그 중 모든 ①의 문자열을 ②의 문자열로 바꾸어준다.
예시에 있는 r'\([^)]*\)'의 경우 정규표현식이다. 이를 이해하기 위해 몇 가지를 살펴본다.
(다만 위의 코드에서 raw 문자열임을 표기하는 r은 없어도 똑같은 의미다, '\('가 예약어가 아니기 때문이다.)
정규표현식
1) 문자 클래스(character class) []
[]로 감싸진 정규식이 의미하는 것은 '[] 사이의 문자들과의 매칭'이다. 예를 들어,
[a-zA-Z]: 모든 알파벳
[각-힣]: 모든 한글
[0-9]: 모든 숫자
이런 식이다. 추가로 아래와 같은 내용도 있다.
2) 반복을 의미하는 *, +
*는 문자열 뒤에 위치하여 해당 문자열이 0번 ~ 무한대(약 2억번)까지 반복되는 것과의 매칭이다.
+는 문자열 뒤에 위차하여 해당 문자열이 1번 ~ 무한대(약 2억번)까지 반복되는 것과의 매칭이다.
[a*bcd]: bcd, abcd, aaaaaabcd 등
[a+bcd]: abcd, aaaaaabcd 등
이를 통해 위의 정규표현식을 이해해보면,
\( + [^)] + * + \)
이렇게 네 개로 구분된다.
(1) 앞 뒤의 '\('와 '\)'는 본래 ()가 묶음을 의미하므로, 괄호 ()를 문자 그대로 인식하기 위해 백슬래시(\)로 escaping 한 것이다.
(2) 두 번째의 [^)]는 ')'를 제외한 모든 문자열을 의미한다.
(3) *는 (2)에 표현한 ')'를 제외한 모든 문자열이 반복되는 경우를 말한다.
즉, 위를 토대로 정리하면 () 안에 있는 ')'를 제외한 모든 문자열, "( ')'를 제외한 모든 문자열)"를 말한다.
r'\([^)]*\)' = "( ')'를 제외한 모든 문자열)"
따라서 위의 코드를 이용하면 문자열에 불필요하게 포함된 괄호와 그 안의 내용을 모두 repl = ''로 바꿈으로써 삭제할 수 있다.
import re
pattern = '\([^)]*\)'
x = '이건 (괄호 안의 불필요한 정보를) 삭제하는 코드다.'
text = re.sub(pattern=pattern, repl='', string= x)
' '.join(text.split())
위와 같이 결과로 나온 문자열을 단어로 쪼갰다가 다시 띄어쓰기로 합쳐주면, 보기 좋은 문장을 완성할 수도 있다.
'AI > 파이썬(Python)' 카테고리의 다른 글
[파이썬/python] EDA 기본(datetime type 변경, 중복값 제거, Null값 확인, unique 확인, 날짜정보 type변경, 히트맵) (0) | 2021.09.22 |
---|---|
[파이썬/python] 데이터 전처리(원핫인코딩_One-hot Encoding, 정규화, 표준화) (0) | 2021.09.22 |
[파이썬/python] 클래스(Class), 클래스 상속 (0) | 2021.09.02 |
[파이썬/Python] 자연어처리 _ TfidfVectorizer (0) | 2021.08.09 |
[파이썬/Python] 자연어처리 _ Bow, CountVectorizer (0) | 2021.08.07 |