티스토리 뷰

반응형

 문자 클래스 [ ]

 

- [] 사이의 문자와 매칭한다.

 

- [abc]의 경우 매칭되는 문자가 a,b,c중 하나라도 가지고 있으면 매칭된다.

 

- [a-c]처럼 할 경우 구간으로 인식하여 from 'a' to 'c'구간을 체크한다.

 

 

 

 Dot(.)

 

- 줄바꿈(\n)을 제외한 모든 문자와 매칭

 

- a.b와 매칭되는 문자열은 aab, a0b처럼 a와 b 사이에 어떠한 종류의 문자가 와도 매칭이 된다. 하지만 abc처럼 a와 b사이에 아무 글자도 존재하지 않으면 매칭이 되지 않는다.

 

 

 

 반복(*)

 

- ca*t의 경우 a가 1번 이상 반복될 경우 매칭이 된다. 예를 들어, cat, caat, caaat 같은 문자열의 경우 매칭된다.

 

- ct는 a가 0번 반복되어 마찬가지로 매칭된다.

 

 

 

 반복(+)

 

- 반복 * 와 차이가 거의 없지만 반복 + 의 경우 ca+t는 ct처럼 a가 0번 반복될 경우 매칭되지 않는다.

 

- [a-z]+ : a부터 z까지 문자열이 0이 아닌 횟수 반복된다.

 

 

 

 반복({m,n},?)

 

- ca{2}t 의 경우는 a가 반드시 2번만 나와야한다.

 

- ca{2,5}t의 경우는 a가 2이상 5이하 번 나와야한다.

 

- ca?t의 경우 a가 0번 이거나 1번 일때에 매칭된다. ?는 {0,1}과 같은 표현이다.

 

 

 

 정규표현식 사용법

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
# 패턴 객체가 생성
= re.compile("a.c")
# match는 첫번째 글자부터 같아야한다.
= p.match("abc")
# search는 문자열 내에만 존재하면 된다.
m2 = p.search("2 abc")
# findall은 일치하는 것을 찾아서 리스트에 담아서 반환해준다. 
# 유일하게 결과물이 re.Match가 아니라 리스트로 나온다. ["Life", "is", "short", "art", "is", "long"]
m3 = p.findall("Life is short art is long")
# finditer의 경우 위의 findall처럼 문자열을 잘라서 반환하지만 iter를 활용하면 각각을 re.Match 객체로 반환할 수 있다.
m4 = p.findinter("Life is short art is long")
for i in m4:
    print(i)
# 검색 후 매칭이 되는 경우 re.Match 객체로 반환
# match가 안될 경우 None으로 반환
print(m)
cs

 

 

 

 match 객체의 메서드 

 

- group() : 매치된 문자열을 리턴한다.

 

- start() : 매치된 문자열의 시작 위치를 리턴한다.

 

- end() : 매치된 문자열의 끝 위치를 리턴한다.

 

- span() : 매치된 문자열의 시작과 끝 위치의 튜플 (시작, 끝)을 리턴한다.

 

 

 

 컴파일 옵션

 

1
2
3
4
5
6
7
import re
# dot과 다르게 \n도 검색한다. 
= re.compile("a.c", re.DOTALL)
# 대소문자를 무시한다.
= re.compile("a.c", re.I) 
 
print(m)
cs

 

 

반응형
댓글