본문 바로가기

Python

파이썬 정규식 (RegEx)

Python에는 re정규식 작업에 사용할 수있는 이라는 내장 패키지가 있다

import re

이렇게 가져다가 쓰면되는데

 

re안에 문자열을 검색 할 수 있는 함수세트가 있다.

 

findall, search, match , split, sub

 

findall : 일치하는 모든 것을 리스트 형태로 반환한다.

search : 주어진 문자열중 일치하는지 확인한다.

match : 주어진 문자열이 처음부터 일치하는지 확인한다.

split : 일치 할 때마다 문자열이 분할 된 목록을 반환한다.

sub : 하나 이상의 일치 항목을 문자열로 바꾼다.

 

메타문자

[] : 문자클래스 , 아무거나 집어넣기 가능

ex) [1-9] 1~9까지를 의미함

 

. : 하나의 문자를 의미

ex) ab.d -> abcd, abdd, abed, abod

 

^ : 문자열 시작

ex) ^ab -> abc, abcd, abcde

 

$ : 문자열 끝

ex) yz$ -> abyz, abcyz, cdyz

 

* : 0회 이상 문자열에 나타나는 것

ex) ab* -> abc , ab, acc, aee (b가 0회 이상 나타나야함, 없어두 됨)

 

+ : 1회이상 문자열에 나타나는 것

ex) ab+ -> abb, abbb, abbbe, abbbbbbbe ( b가 1회 이상 나타나야함)

 

match 함수

import re

p = re.compile("ab.d")
m = p.match("abcd")
print(m.group())

이 코드를 한번 보면

메타문자 .을 이용하고, match를 이용해 처음부터 일치하는지 확인하고 group을 이용해 일치하는 문자열 부분을 반환했다.

실행 결과

컴파일 결과 abcd가 잘 출력된걸 볼 수 있다.

 

import re

txt = "you need to sleep"
p = re.compile("ee")
m = p.search(txt)
print(m)

search를 이용하면

어디에 문자열이 매치했는지 알려준다.

만약 찾고 싶은문자열이 없다면

import re

txt = "you need to sleep"
p = re.compile("i")
m = p.search(txt)
print(m)

이렇게 None으로 표기되는걸 볼 수 있다.

 

findall 함수를 이용하면

import re

txt = "you need to sleep"
p = re.compile("o")
m = p.findall(txt)
print(m)

일치하는 모든것을 리스트 형태로 반환하는 것을 알 수 있다.

 

 

split 함수

import re

txt = "you need to sleep"
m = re.split("\s", txt)
print(m)

여기서 \s 는 문자열에 공백 문자가 포함 된 일치 항목을 반환하는 일종의 특수 시퀀스다.

 

sub 함수

import re

txt = "you need to sleep"
m = re.sub("\s", "!", txt)
print(m)

스페이스가 ! 로 대체되어 표시된걸 볼 수 있다.

 

추가로 

import re

p = re.compile("ab.d") 
m = p.match("abcde")
print("string : ", m.string)
print("start : ", m.start())
print("end : ", m.end())
print("span : ",m.span())

string : 일치하는 문자열 반환

start : 일치하는 문자열 시작 인덱스 반환

end : 문자열 끝나는 인덱스 반환

span : 일치하는 문자열 시작 / 끝 인덱스 반환

 

적절하게 사용하여 원하는 문자를 뽑아낼 수 있는 능력을 기르자.