Feb 13, 2023
Contents
Contents메타 문자 (meta characters)문자 클래스 [ ]자주 사용하는 문자 클래스Dot (.)반복 (*)반복 (+)반복 ({m,n})반복 (?)정규식으로 문자열 검색하기match 객체의 메서드정규식 컴파일 옵션그 외 메타문자들그루핑전방 탐색문자열 바꾸기Greedy와 Non-greedy
출처: https://wikidocs.net/4309
메타 문자 (meta characters)
.
^
$
*
+
?
{
}
[
]
|
(
)
가 있다.문자 클래스 [ ]
[
와]
사이에 있는 문자들과 일치하는 문자열을 찾는다.
-
을 안에 쓰면 범위를 지정할 수 있다. (From-To)- ex)
[A-Z]
,[a-z]
,[0-9]
,[a-zA-Z]
,[A-Z0-9]
등
^
문자는NOT
연산자를 의미한다. 따라서, 안에^
문자가 다른 문자 앞에 들어간다면 그 문자는 탐색하지 않음을 뜻한다.
자주 사용하는 문자 클래스
- 공통적으로, 대문자는 소문자가 하는 역할의 반대 역할이다.
\d
:[0-9]
와 동일한 연산으로, 숫자를 찾는다.
\D
:[^0-9]
와 동일한 연산으로, 숫자가 아닌 문자를 찾는다.
\s
:[ \t\n\r\f\v]
와 동일한 연산으로, whitespace 문자를 찾는다.
\S
:[^ \t\n\r\f\v]
와 동일한 연산으로, whitespace 문자가 아닌 문자를 찾는다.
\w
:[a-zA-Z0-9_]
와 동일한 연산으로, 문자 및 숫자를 찾는다.
\W
:[^a-zA-Z0-9_]
와 동일한 연산으로, 문자 및 숫자가 아닌 문자를 찾는다.
Dot (.)
- 개행 문자
\n
을 제외한 모든 문자를 찾는다. ex)a.b
->a
+(제외한 모든 문자)
+b
탐색 - (주의) 문자 클래스를 나타내는
[
]
안에.
를 쓰면.
문자 하나만 찾는다. 모든 문자를 찾고자 한다면 대괄호로 감싸지 말 것
반복 (*)
- 앞에 붙은 문자가
0
개 이상 반복되는 문자열을 찾는다. (없어도 된다는 뜻) ex)ca*t
->ct
,caaat
,cat
,caaaaaaaat
모두 match
반복 (+)
- 앞에 붙은 문자가
1
개 이상 반복되는 문자열을 찾는다. (적어도 하나는 있어야 함) ex)ca*t
->caaat
,cat
,caaaaaaaat
모두 match되지만,ct
는 match되지 않는다.
반복 ({m,n})
m,n은 붙여 써야 한다.
{}
앞에 오는 문자가 m개 이상, n개 이하 반복되는 문자열을 찾는다. (개수 범위 조절 가능) ex)ca{2,5}t
->caat
,caaat
,caaaat
,caaaaat
모두 match되지만,cat
는 match되지 않는다.
반복 (?)
?
앞에 오는 문자가 있어도 되고, 없어도 되는 optional한 조건을 붙일 때 쓴다. ex)ca?t
->ct
,cat
모두 match되지만,caat
는? None
정규식으로 문자열 검색하기
match()
: 문자열의 처음부터 정규식과 매치되는지 조사한다.- 정규식과 매치되는지 맨 앞부터 체크하기 때문에, 처음부터 안 맞으면 매치 실패로 간주된다.
search()
: 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.- 일치하는 패턴이 시작되는 부분부터 체크한다. 체크가 끝나면 작업을 종료한다.
findall()
: 정규식과 매치되는 모든 substring을 리스트로 리턴한다.
finditer()
: 정규식과 매치되는 모든 substring을 iterator 객체로 리턴한다.
match 객체의 메서드
group()
: 매치된 문자열을 리턴한다. (getter) ex)‘3 python’
->‘python’
start()
: 매치된 문자열의 시작 인덱스를 리턴한다. ex)2
end()
: 매치된 문자열의 끝 인덱스를 리턴한다. ex)8
span()
: 매치된 문자열의 (시작, 끝)에 해당되는 튜플을 리턴한다. ex)(2, 8)
정규식 컴파일 옵션
re.compile(‘<정규식>’, ‘<옵션>’)
형식으로 컴파일 옵션을 부여할 수 있다.
- 컴파일 옵션 목록은 다음과 같다. 괄호 안에 있는 문자는 약어로, 앞에 있는 문자열을 대신에 쓸 수 있다.
DOTALL
(S) : . 정규식이 개행 문자 포함한 모든 문자와 매치할 수 있도록 한다.^
: 문자열의 처음을 의미$
: 문자열의 끝을 의미IGNORECASE
(I) : 대소문자에 관계없이 매치할 수 있도록 한다.MULTILINE
(M) : 여러 줄과 매치할 수 있도록 한다. (^
,$
메타문자 관련하여 유용하다.)VERBOSE
(X) : verbose 모드를 사용할 수 있도록 한다. (여러 줄을 사용할 수 있고, 주석 등을 사용할 수 있다.)
그 외 메타문자들
|
: 정규식들 간 OR 연산
^
:^
뒤에 있는 문자열이 문자열의 처음인지 찾을 때 쓴다.re.MULTILINE
옵션이 적용되어 있다면 여러 줄일 떄 각 줄이 따로 탐색된다.
$
:$
앞에 있는 문자열이 문자열의 끝인지 찾을 때 쓴다.
\A
: 문자열의 처음과 매치되는지 찾을 때 쓴다.^
와 달리,re.MULTILINE
옵션이 적용되어도 전체 문자열의 처음부터만 비교한다.
\Z
: 문자열의 끝과 매치되는지 찾을 때 쓴다.$
와 달리,re.MULTILINE
옵션이 적용되어도 전체 문자열의 처음부터만 비교한다.
\w
: 단어 구분자로, 들어간 자리는 일반적으로 whitespace 문자다. 이러한 whitespace로 단어가 구분되어 있는지 찾을 때 쓴다.
\W
: 반대로, 들어간 자리에 whitespace가 있지 않아 구분되지 않은 단어를 찾을 때 쓴다.
그루핑
()
로 문자열을 둘러싸, 둘러싸인 문자열이 반복되는지와 같은 상황에서 정규식을 작성할 수 있다.
전방 탐색
- 특정 문자열로 제한하여 간단히 탐색 후 문자열 소비 가능
- 긍정형 전방 탐색:
?=<문자열>
- 부정형 전방 탐색:
?!<문자열>
문자열 바꾸기
re
는 미리 정규식으로 컴파일되어 있어야 한다.
re.sub(<새로 대체할 문자열>, <적용할 문자열>, <(선택) count>)
Greedy와 Non-greedy
- Greedy: 정규식에 맞으면 모든 문자열을 소비함
- Non-greedy: 정규식 맨 뒤에
?
를 추가하면 가장 먼저 충족하는 문자열까지만 소비한다.