!아래 출처를 바탕으로 작성된 글!
정규표현식
: 특정 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어. 복잡한 문자열의 검색과 치환을 위해 사용되며, Python 뿐만 아니라 문자열을 처리하는 모든 곳에서 사용된다.
메타 문자
: 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
문자 클래스 [ ]
: [ ] 사이의 문자들과 매치
[abc]
"a" -> O
"banana" -> O
"hello" -> X
하이픈 -
: 두 문자 사이의 범위
[abc] = [a-c]
[0123] = [0-3]
[a-zA-Z] = 알파벳
[0-9] = 숫자
not ^
: [ ] 안에서 not의 의미를 갖는다
[^0-9] = 숫자x
+) 자주 사용하는 문자 클래스
\d | [0-9] | 숫자와 매치 |
\D | [^0-9] | 숫자가 아닌 것과 매치 |
\s | [ \t\n\r\f\v] | whitespace 문자와 매치, 맨 앞에 빈 칸은 공백문자(space)를 의미한다. |
\S | [^ \t\n\r\f\v] | whitespace 문자가 아닌 것과 매치 |
\w | [a-zA-Z0-9_] | 문자+숫자(alphanumeric)와 매치 |
\W | [^a-zA-Z0-9_] | 문자+숫자(alphanumeric)가 아닌 문자와 매치 |
Dot .
: \n(줄바꿈)을 제외한 모든 문자 한 개
a.b = "a + 모든문자 + b"
a.b
"aab" -> O
"abc" -> X
"a123b" -> X (.은 문자 한개를 의미한다) 이게 매칭되려면 a...b로 해야된다
+) 단, 문자 클래스[ ] 내에서의 .(Dot)는 문자 그대로의 .를 의미한다
a[.]b
"a.b" -> O
"acb" -> X
반복 *
: *앞에 있는 문자가 반복될 수 있다. 0번 반복도 포함
do*g
"dg" -> O (0번 반복 o)
"dooog" -> O
반복 +
: +앞에 있는 문자가 1번 이상 반복
do+g
"dg" -> X (0번 반복 x)
"dooog" -> O
반복 횟수 {m}, {m,n}, ?
: 반복 횟수를 지정하며 m또는 n이 생략될 수 있다. 생략되면 각각 0과 ∞(사실 2억개 미만)를 의미한다.
{1,} = +
{0,} = *
do{1}g
: 반드시 m번 반복
"dog" -> O
"dooog" -> X
do{2,4}g
: n이상 m이하 반복
"dog" -> X
"doog" -> O
"dooog" -> O
"doooog" -> O
? = {0, 1} 있거나 없다
app?le
"aple" -> O
"apple" -> O
re 모듈
: 정규 표현식 지원
re.compile은 입력값으로 받은 정규 표현식을 컴파일해서 리턴한다.
컴파일 결과로 나온 객체를 패턴이라고 부르고 이를 이용한다.
import re
p = re.comile('app?le') <- 패턴 객체 리턴
다음은 패턴 객체가 제공하는 메서드(match, search, findall, finditer)에 대한 설명이다.
match와 search는 매치 여부를 보고 매치가 되면 match 객체를 리턴하고, 아니면 None을 리턴한다.
match()
: 문자열의 처음부터 정규식과 매치되는지 조사한다.
문자열의 "처음"부터라서 pineapple 이런건 땡이다.
search()
: 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
find()와 달리 search()는 전체여서 pineapple도 매치된다.
findall()
: 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
오..
finditer()
: 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.
findall과 finditer의 결과를 비교했다.
findall은 리스트로 결과를 돌려주고
finditer은 iterator 객체를 돌려주며 각 요소는 match 객체이다.
match 객체도 유용한 메서드를 제공한다.
group()
: 매치된 문자열을 돌려준다.
start()
: 매치된 문자열의 시작 위치를 돌려준다.
end()
: 매치된 문자열의 끝 위치를 돌려준다.
span()
: 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다.
+) 패턴을 컴파일하는 과정을 축약할 수 있다.
p = re.compile('app?le')
m = p.search('pen pineapple apple pen')
m = re.search('app?le', 'pen pineapple apple pen')
+) \(백슬래시)
백슬래시는 escape 기능으로 쓰는데
\를 \ 그대로 인식하게 하고 싶으면 \\ 이렇게 두번을 써줘야되는데
실제 파이썬 정규식 엔진에는 파이썬 문자열 리터럴 규칙에 따라 \\이 \로 변경되어 \이 전달된다고 한다.
그래서 \\\\이렇게 4번이나 써줘야하는 불편함을 없애기 위해
정규표현식 문자열 앞에 r을 넣어주면 \\이렇게 써도 된다.
거의 r을 붙여놓고 사용하는것 같다.
[참고]
'Study Log' 카테고리의 다른 글
poc 기초 - 8 (0) | 2020.07.10 |
---|---|
poc 기초 - 7 (1) | 2020.07.07 |
네트워크 - 1 (2) | 2020.06.19 |
poc 기초 - 6 (0) | 2020.06.18 |
poc 기초 - 5 (0) | 2020.06.17 |
댓글