텍스트 데이터 전처리를 위한 정규표현식을 알아보겠습니다
1. 사용 모듈
import re
2. 텍스트에서 알파벳만 가져오기
p = re.compile('[^a-zA-Z ]*')
p.sub('', text)
text에서 정규식 p에 해당하면 '', 지우기
3. 메타문자
3-1 |
if re.match( 'a|b|c', 'a' ): print('1')
if re.match( 'a|b|c', 'd' ): print('2')
if re.match( 'a|b|c', 'ad' ): print('3')
if re.match( 'a|b|c', 'da' ): print('4')
|는 or 조건
1, 3 : 1번은 a가 있어서 프린트 되었고 3번은 첫글자가 일치하여 match된다
3-2 []
if re.match( '[abc]', 'a' ): print('1')
if re.match( '[abc]', 'efz' ): print('2')
if re.match( '[abc]', 'abd' ): print('3')
if re.match( '[abc]', 'b56' ): print('4')
if re.search( '[abc]', '56b' ): print('5')
[]는 배열
1,3,4,5 : 1,3,4는 첫글자에 있음으로 출력, 5번은 search로 첫글자에 상관없이 []에 존재하면 출력된다
3-3 -
if re.match( '[ㄱ-힣]', '가123ABC' ): print('1')
if re.match( '[0-9a-z]', 'Aa' ): print('2')
if re.search( '[0-9a-z]', 'Aa' ): print('3')
-는 1234를 1-4로 표현하는 방식 처럼 사용된다
1, 3 : 1은 ㄱ-힣에 '가'가 포함되어서 출력, 3번은 search이기에 a-z중 a가 포함되어 출력된다.
3-4 .
if re.match( '[a.b]', 'ab' ): print('1')
if re.match( '[a.b]', 'a1b' ): print('2')
if re.match( '[a.b]', 'abc' ): print('3')
if re.match( '[a.b]', 'bcd' ): print('4')
if re.match( '[a.b]', 'cab' ): print('5')
if re.match( '[a.b]', '.ab' ): print('6')
----
if re.match( 'a.b', 'a' ): print('1')
if re.match( 'a.b', 'abc' ): print('2')
if re.match( 'a.b', 'a1b' ): print('3')
if re.match( 'a.b', 'a2be' ): print('4')
.은 .이라는 문자 하나이며 사용위치에 따라 해석이 달라지며 [], '' 두가지 방법으로 주로사용된다
match [문자.문자] : a, b로 시작되는 문자열
match '문자.문자' : a, b가 포함되는 문자열 \n 이스케이프 표현은 제외
3-5 ^
- 일반 문자열에서는 문자열의 맨 처음과 일치함을 의미
- 문자열 에서는 해당 문자는 제외함을 의미
3-6 $
if re.match( '^[0-9]+[a-z]+$', '1' ): print('1')
if re.match( '^[0-9]+[a-z]+$', '11' ): print('2')
if re.match( '^[0-9]+[a-z]+$', '111111A' ): print('3')
if re.match( '^[0-9]+[a-z]+$', '1111111a' ): print('4')
$은 문자열의 맨끝과 일치함을 의미합니다. 위 코드에서는 4번만 매치됩니다
3-7 *, +
if re.match( 'seo*ul', 'seul' ): print('1')
if re.match( 'seo*ul', 'seoul' ): print('2')
if re.match( 'seo*ul', 'seoooul' ): print('3')
----
if re.match( 'seo+ul', 'seul' ): print('1')
if re.match( 'seo+ul', 'seoul' ): print('2')
if re.match( 'seo+ul', 'seoooul' ): print('3')
*,+ 앞의 문자열은 다음의 특성을 가집니다 *는 -~ 무한대 반복 가능, +는 1~ 무한대 반복 가능하다
*는 모두, +는 2,3번
3-8 {}
지정된 횟수 반복 표현식입니다
{2} 2회 반복
{2,3} 2~3회 까지 반복 가능
3-9 ?
{ 0,1 } 과 같은 의미를 가짐 2번 이상은 반복 불가한 표현식
쓰다보니 생각보다 길어져서 2편으로 이어서 작성하겠습니다!
'Python > 데이터 분석' 카테고리의 다른 글
데이터분석 자동처리 pandas-profiling (0) | 2024.02.14 |
---|---|
데이터 분석 텍스트 마이닝 정규표현식 python [2편] (0) | 2024.02.06 |
데이터 분석 텍스트 마이닝 예제 nsmc (0) | 2024.01.30 |
데이터 분석 matplotlib, seaborn 시각화 (0) | 2024.01.30 |
데이터 분석 실습 예제 음원 데이터 준비 (0) | 2024.01.30 |