본문 바로가기

study

[Python 문법] 정규 표현식

데이터 전처리 과정에서 꼭 사용하게 되는 정규 표현식이지만 그 때마다 부족함을 느껴 한번 정리해보고자 한다. 

Reference - https://wikidocs.net/4308

 

정규표현식(Regular Expressions)

특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다. 주로 Programming Language나 Text Editor 등 에서 문자열의 검색과 치환을 위한 용도로 쓰인다.

http://www.nextree.co.kr/p4327/

 

1. re 모듈 - 정규표현식을 활용하기 위한 모듈

import re 로 불러 온 뒤 str = re.compile('정규표현식') 로 컴파일한다. 컴파일한 객체 p를 메서드를 활용하여 가공한다.

 

2. 메서드 - 문자열 검색

# 패턴이 다음과 같을 때 각각 메서드가 어떻게 기능하는지 알아보자
p = re.compile('[a-z]+')

 

match : 문자열의 처음부터 정규식과 매치되는지 조사한다.

p.match('aaaaa')
<_sre.SRE_Match object; span=(0, 5), match='aaaaa'>

 

search : 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.

p.search('aaaaa')
<_sre.SRE_Match object; span=(0, 5), match='aaaaa'>

 

findall : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.

p.findall('1aa1aaa1a1aa1aaa')
['aa', 'aaa', 'a', 'aa', 'aaa']

 

finditer : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.

p.finditer('a1bb1ccc')
<callable_iterator object at 0x7f850c4285f8>

f_iter = p.finditer('a1bb1ccc')
for i in f_iter:
    print(i)
    
<_sre.SRE_Match object; span=(0, 1), match='a'>
<_sre.SRE_Match object; span=(2, 4), match='bb'>
<_sre.SRE_Match object; span=(5, 8), match='ccc'>

 

sub : 패턴 대체한다.

print(re.sub('\d{4}', 'XXXX', '010-1234-5678'))
010-XXXX-XXXX

 

split : 패턴으로 나눈다.

print(re.split('<[^<>]*>',
               '<html> Wow <head> header </head> <body> Hey </body> </html>'))

['', ' Wow ', ' header ', ' ', ' Hey ', ' ', '']

 

 

3. 메타 문자 - 11가지

정규표현식을 활용할때 쓰이는 중요한 문자, 각 기능을 외워두면 좋다.

표현식 부연 설명
[ ] 문자 클래스
. \n을 제외한 모든 문자와 매치(점 하나는 글자 하나를 의미)
* 0회 이상 반복
+ 1회 이상 반복
{m,n} m회 이상 n회 이하
| or 조건식을 의미
^ 문자열의 시작 의미
$ 문자열의 끝을 의미
? 0회 이상 1회 이하
\ 이스케이프, 또는 메타 문자를 일반 문자로 인식하게 한다.
( ) 그룹핑, 추출할 패턴을 지정한다.

 

4. 축양된 문자 클래스

* 문자열에서 ^와 문자클래스 ^는 서로 다른 의미이니 주의해야한다.

원래 표현식 축약된 표현 부연 설명 사용처
[0-9] \d 숫자를 찾는다 숫자
[^0-9] \D 숫자가 아닌 것을 찾는다 텍스트 + 특수문자 + 화이트스페이스
[ \t\n\r\f\v] \s whitespace 문자가 아닌 것을 찾는다 스페이스, TAB, 개행(new line)
[^ \t\n\r\f\v] \S whitespace 문자가 아닌 것을 찾는다 텍스트 + 특수문자 + 숫자
[a-zA-Z0-9] \w 문자+숫자인 것을 찾는다. (특수문자는 제외, 언더스코어 포함) 텍스트 + 숫자
[^a-zA-Z0-9] \W 문자+숫자가 아닌 것을 찾는다. 특수문자 + 공백