본문 바로가기
머신러닝

정규표현식 개념 및 사용법

by 방구석 데이터사이언티스트 2022. 3. 12.
728x90
반응형

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
 
= re.compile('[a-z]+'# 소문자가 1회이상 반복되는 것을 반환
= 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
= re.compile('[a-z]+')
 
= 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"
 
= 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()으로 볼 수 있습니다.

728x90
반응형

댓글