데이터 전처리 과정에서 꼭 사용하게 되는 정규 표현식이지만 그 때마다 부족함을 느껴 한번 정리해보고자 한다.
0. 정규표현식(Regular Expressions)
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다. 주로 Programming Language나 Text Editor 등 에서 문자열의 검색과 치환을 위한 용도로 쓰인다.
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 | 문자+숫자가 아닌 것을 찾는다. | 특수문자 + 공백 |
*Reference - https://wikidocs.net/4308
'study' 카테고리의 다른 글
추천 시스템에 대하여 (0) | 2020.06.23 |
---|---|
Mapbox를 활용한 지역별 코로나 감염자 시각화 (9) | 2020.05.16 |
[Python 문법] 정규 표현식 (0) | 2020.05.14 |
Interactive Widget 활용한 시각화 (0) | 2020.05.13 |
lesson learned_2 (동작구 빅데이터활용 공모전) (0) | 2020.05.02 |
lesson learned_1 (동작구 빅데이터활용 공모전) (0) | 2020.05.01 |
댓글0