1. 정규표현식
- 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
- 텍스트에 포함된 특정 문자열을 검색하는 용도
- 파이썬에서는 re모듈을 이용하여 표현
2. 패턴 객체
- re.compile() 사용 -> 정규식 패턴을 파이썬이 사용할 수 있는 정규식 객체로 컴파일
- Compile을 사용하면 패턴 객체를 재사용 가능 -> 시간 단축
- match(), search()와 같은 메소드를 통해 사용됨
※ match : 처음이 일치하지 않으면 None 반환
※ search : 처음이 일치하지 않더라도 전체를 검색
3. 메타 문자
메타문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용되는 문자
.(Dot): 하나의 문자 하나를 의미 -> .. 은 문자 두개를 의미, 여기서 문자는 숫자나 특수문자를 모두 포함
* : 바로 앞 문자가 0번 이상 반복
+ : 바로 앞 문자가 1번 이상 반복
{} : 앞 문자의 반복 횟수 지정
4. 축약표현
숫자나 텍스트+숫자, 특스트 + 특수문자 + 숫자 같이 자주 필요한 표현들을 축약해서 표현
5. findall
정규식과 매치되는 모든 문자열을 [리스트] 형식으로 반환
1
2
3
4
5
6
7
8
9
10
|
import re
p = re.compile('[a-z]+') # 소문자가 1회이상 반복되는 것을 반환
m = p.findall('this is my life')
print(m)
print(type(m))
# 결과
# ['this', 'is', 'my', 'life']
# <class 'list'>
|
cs |
6. match의 객체
1
2
3
4
5
6
7
8
|
p = re.compile('[a-z]+')
m = p.match('python')
print(m.group()) # python
print(m.start()) # 0
print(m.end()) # 6
print(m.span()) # (0, 6)
|
cs |
group : 매치된 문자열을 리턴한다.
start : 매치된 문자열의 시작 위치를 리턴한다.
end : 매치된 문자열의 끝 위치를 리턴한다.
span : 매치된 문자열의 (시작, 끝)에 해당되는 튜플을 리턴한다.
7. 정규표현식 예제
- 특정패턴의 문자 봔환
1
2
3
4
5
|
# text에서 "hypen-word", "long-ish" 찾기
import re
text = 'Only find the hypen-words in this sentence. But you do not know how long-ish they are'
re.findall(r"\S+-\S+",text)
|
cs |
"hypen-word"와 "long_ish"의 공통점은 중간에 "-"가 있다는 것입니다.
즉, 하나이상 문자 + "-" + 하나이상 문자 라는 패턴을 가지는 것입니다.
따라서 정규표현방식으로 패턴을 만들어 findall()을 이용해 text에서 "hypen-word"와 "long_ish"를 리스트형태로 반환하면 됩니다.
- 전환번호 봔환
1
2
3
4
5
6
|
# text에서 전화번호 찾기
import re
text = "My telephone number is 010-1234-5678"
p = re.compile(r"(\d{3})-(\d{4})-(\d{4})")
phone = re.search(p, text)
|
cs |
이번에는 compile() 과 search()를 이용해봤습니다.
compile()에 정규패턴을 만들어줍니다. \d(축약표현)는 0-9까지 숫자입니다. {숫자}는 문자의 개수입니다.
\d{3}은 세 자리 숫자이고 \d{4}은 네자리 숫자입니다.
전화번호는 세 자리 숫자 + "-" + 네 자리 숫자 + "-" + 네 자리 숫자로 구성되기 때문에
(\d{3})-(\d{4})-(\d{4}) 과 같이 표현할 수 있습니다.
그리고 search()를 사용하면 text 내에서 위 정규패턴을 만족하는 부분을 반환해줍니다.
반환된 전화번호는 phone.group()으로 볼 수 있습니다.
'머신러닝' 카테고리의 다른 글
Loss Function and Gradient Descent(손실함수와 경사하강법) (0) | 2022.05.27 |
---|---|
Central Limit Theorem(중심극한정리)이란? (0) | 2022.05.20 |
[XGB][파라미터 최적화] Bayesian Optimization (0) | 2022.02.16 |
[데이터 불균형][해결방안] Random UnderSampling (0) | 2022.02.11 |
[변수선택법] 릿리(Ridge) 라쏘 (Lasso) 엘라스틱 넷(Elastic Net) (0) | 2022.02.02 |
댓글