텍스트 데이터 전처리를 위한 정규표현식을 알아보겠습니다

 

 

 

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편으로 이어서 작성하겠습니다!

+ Recent posts