정규표현식(regular expression)
정규표현식은 문자열에 대한 패턴을 분석하는데 쓰이는 문법입니다.
예를 들어서 뉴스를 크롤링할 경우 뉴스 내용과 필요없는 기자의 이메일주소를 삭제하는데 정규표현식이 쓰일 수 있습니다.
정규표현식은 '메타문자' 때문에 헷갈리고 어려운 경우가 많은데요, 메타문자는 문자가 그 뜻이아니라 특별한 용도로 사용되는 문자를 뜻합니다.
정규표현식에서 사용되는 메타문자의 예는 다음과 같습니다.
r은 뒤 문자열을 그대로 반환
[ ]는 문자들의 범위
[abc]의 의미는 ‘a,b,c’중 하나의 문자와 매치
[0-5]는 [012345]와 동일한 의미
[0-9] : 모든 숫자
[a-z] : 모든 소문자
[A-Z] : 모든 대문자
[a-zA-Z0-9] : 모든 알파벳 문자 및 숫자
\d : 숫자를 의미 [0-9]와 동일
\D : 숫자가 아닌 문자 [^0-9]와 동일
\s : space나 tab처럼 공백을 표현하는 문자
\S : 공백이 아닌 문자
\w : 알파벳 대소문자와 숫자 [0-9a-zA-Z]와 동일
\W : 문자+숫자가 아닌 문자 [^0-9a-zA-Z]와 동일
나열된 리스트로만 보면 정규식이 어떻게 쓰이는지 머리가 아픈데요, 몇가지 예시를 보면서 배워보겠습니다.
1) 연속된 3자리 숫자 찾기
import re
m=re.search(r'\d\d\d','서울시 광진구 ooo아파트 11동 103호')
print(m)
search함수 원본 문자열에서 찾을 문자열을 찾아 반환하는 함수입니다.
위 예에서 찾을 문자열은 '\d\d\d'인데, 연속된 숫자 세자리를 뜻합니다. 따라서 반환 되는 값은 '103'이 됩니다.
2) 연속된 2자리 숫자 + 1자리 문자 찾기
import re
m=re.search(r'\d\d\w','서울시 광진구 ooo아파트 11동 103호')
print(m)
\d\d\w를 찾을 문자열에 넣으면 숫자 두자리에 문자 한자리의 패턴을 찾게 됩니다.
반환되는 값은 '11동' 이겠네요
3) 특정 문자 앞 3글자 찾기
import re
m=re.search(r'...아파트','서울시 광진구 ooo아파트 11동 103호')
print(m)
.은 아무 문자를 나타냅니다. 위 코드에서 ...아파트하면 아파트 앞 3글자 + 아파트를 출력해주겠네요.
print되는 값은 'ooo아파트' 입니다.
4) 핸드폰번호 정규표현식
import re
m1=re.search(r'010-[0-9]{4}-[0-9]{4}','010-1234-1234')
m2=re.search(r'010-[0-9]{4}-[0-9]{4}','1234-1234-1234')
print(m1)
print(m2)
좀 더 응용해보겠습니다. 위 코드를 적용하면 핸드폰번호 양식인 010-xxxx-xxxx이 잘 입력되었는지를 알 수 있습니다.
m1은 제대로 입력이 되었기 때문에 통과되지만, m2는 앞자리가 '1234'로 입력이 되었기 때문에 None을 반환합니다.
5) findall
import re
m=re.findall(r'[0-9]+', '1. text, 2. word, 3. topic') # 매칭되는 모든 문자열
print(m)
search 함수 말고 findall 함수를 이용 할 수도 있습니다. 위 코드는 문자열 내 모든 숫자를 찾아주는 것을 표현한 것입니다.
6) sub
import re
m=re.sub(r'[0-9]+','*','1. text, 2. word, 3. topic')
print(m)
sub은 특정 문자열 패턴을 검색하여 다른 패턴으로 바꿔주는 함수입니다.
위 코드는 숫자를 찾아서 *로 바꿔주는 것인데요, 결과는 '*. text, *. word, *. topic' 이 출력됩니다.
이상 텍스트마이닝에서 유용하게 쓰이는 정규표현식을 알아봤습니다.
감사합니다.
'Programming for trading' 카테고리의 다른 글
[Python] 업비트API로 비트코인 1분봉 가져오기 (0) | 2023.01.17 |
---|---|
[Python] chatGPT 활용기(데이터프레임 replace) (2) | 2023.01.16 |
[Python] OpenAPI로 주식 영업일, 휴장일 구하기 (0) | 2022.12.31 |
[Python] 데이터프레임 차집합 구하기 (0) | 2022.12.30 |
[Python] 삼성전자 PER, PBR 웹크롤링 (0) | 2022.12.20 |