반응형
정규표현식
import re
- 자연어처리과정 중 데이터 전처리 과정에서는 데이터에서 유의미한 것을 찾아 처리해야 한다.
- 이럴 때 주로 활용되는 것이 정규표현식이다.
- 문자열의 패턴을 특정형태로 표현하여 텍스트에서 해당 문자열을 검색하거나 치환할 때 활용할 수 있다.
- 파이썬에서는 re 모듈을 import하여 사용한다.
정규식 객체
re.compile(".")
- re.compile(검색할문자열) 함수를 호출하면 정규식 객체 (re.RegexObject 클래스 객체)를 리턴하게 된다.
- re.RegexObject 클래스는 여러 메소드를 보유하여 문자열 검색 혹은 치환을 도와준다.
- 즉, 특정문자를 담고있는 정규식 객체를 활용하여 문자열을 검사 및 수정하는 것이다.
- match() : 문자열의 처음부터 정규식과 매치되는지 조사한다. (매치 시 RegexObject리턴)
- search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. (매치 시 RegexObject리턴)
- findall() : 정규식과 매치되는 모든 문자열을 리스트로 돌려준다.
- finditer() : 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 돌려준다.
기본 메타문자
- complie안에 평범한 문자열을 넣어 사용한다면 기존의 문자열 탐색 알고리즘과 비교해서 큰 차이가 없을 것이다.
- 따라서 메타 문자를 활용하여 문자를 다양하게 표현하고 이에 따라 검색 문자열 패턴도 다양화할 수 있다.
[문자들] | 문자들 중 하나여야함 |
[^문자들] | 이 문자들이 아니어야함 |
. | 모든 문자 |
+ | 앞 패턴이 하나 이상이어야 함 |
* | 앞 패턴이 0개 이상이어야 함 |
{m,n} | 횟수 지정 m~n. 둘 중 하나만 입력해서도 사용가능. 쉼표 유지할 경우 이상 혹은 이하의 의미가 됨. |
| | 앞,뒤 두 패턴 중 하나여야함 |
^ | 시작 |
$ | 끝 |
? | 다음에 오는 문자의 매칭여부는 최초만 체크함 |
예제1
Q. ['abbbbba', 'cddb', 'aerb', 'aeeeb', 'almnj'] (모두 문자열)일 때 1, 3번째만 리턴하는 정규표현식을 작성하시오
import re
list_a = ['abbbbba', 'cddb', 'aerb', 'aeeeb', 'almnj']
p = re.compile('a..b')
for i in list_a:
print(p.match(i))
==결과==
<re.Match object; span=(0, 4), match='abbb'>
None
<re.Match object; span=(0, 4), match='aerb'>
None
None
문자 클래스
- 특정 종류의 문자를 이스케이프 문자와 유사하게 표현할 수 있다.
- \d : 숫자
- \D : not 숫자
- \s : 공백
- \S : not 공백
- \w : 문자+숫자
- \W : not 문자+숫자
- 단, 이스케이프 문자와 겹칠 경우 문제가 발생할 수 있으므로 해당 문자 클래스를 사용할 경우 문자열 앞에 r을 표기한다. (ex : r'.+\s')
정규식 오브젝트 처리
- 앞선 예제에서 보았듯, match와 같은 정규식 객체의 메소드를 통해 처리된 결과는 object형태이다.
- 이를 활용하기 위해선 다른 함수를 더 처리해야 한다.
- group() : 매치된 문자열 전부 / 일부(그룹안에 그룹명 혹은 번호 삽입시)
- start() : 매치된 문자열 시작 인덱스
- end() : 매치된 문자열 끝 인덱스
- span() : 매치된 문자열 (시작,끝) 튜플
list_b = ['abcd efghopqr-stuv', 'abcd-efgh', 'abc defghijk', 'ab cdhijk']
p = re.compile(r'.+\s')
for i in list_b:
matched = p.match(i)
if matched is not None:
print(matched.group())
==결과==
abcd
abc
ab
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
Pandas 데이터 시각화 한글깨짐 (0) | 2020.07.14 |
---|---|
파이썬 정규표현식 - 그룹 만들기 (0) | 2020.07.14 |
Pandas 데이터 시각화 (0) | 2020.07.14 |
Pandas 데이터프레임 그룹 나누기 (0) | 2020.07.14 |
Pandas 데이터프레임 결측치(null값) 제어 (0) | 2020.07.14 |