이스케이프 문자: \
(백슬래시, 키보드에서 Enter 키 위 키) 와 바로 뒤에 같이 나오는 특정 문자(r, n, t 등)를 합쳐진 특별한 문자
\n
, \r
: 줄 바꿈
\n
: 라인 피드, 유닉스 (맥) 운영 체제에서의 줄 바꿈 표현\r\n
: 캐리지 리턴(종이 오른쪽으로 밀기) + 라인 피드(종이 위로 밀기), 윈도우즈 운영 체제에서의 줄 바꿈 표현\t
: 탭 (키보드에서 Tab 키)
\'
: ' (홑따옴표)
\"
: " (쌍따옴표)
\\
: \ (백슬래시) 자체를 표시
r'문자열': 이스케이프 문자의 의미 무시, 그대로 출력, raw string
. ^ $ * + ? { } [ ] \ | ( )
^
메타 문자를 사용할 경우에는 반대(not)
라는 의미를 갖는다. 예를 들어 [^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치된다.자주 사용하는 정규식
\d - 숫자와 매치, [0-9]와 동일한 표현식이다.
\D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
\s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
\S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
\w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
\W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.
a.b
: "a + 모든문자 + b"a[.]b
: "a + Dot(.)문자 + b"ca*t
: 바로 앞에 있는 문자 a가 0부터 무한대로 반복될 수 있다는 의미(메모리 제한으로 2억 개 정도만 가능)ca+t
: "c + a(1번 이상 반복) + t"ca{2}t
: "c + a(반드시 2번 반복) + t"
ca{2,5}t
: "c + a(2~5회 반복) + t"
ab?c
: "a + b(있어도 되고 없어도 된다) + c"
|
메타 문자는 or과 동일한 의미로 사용된다.A|B
: A 또는 B^
메타 문자는 문자열의 맨 처음과 일치함을 의미>>> print(re.search('^Life', 'My Life'))
None
$
메타 문자는 문자열의 끝과 매치함을 의미^
또는 $
문자를 메타 문자가 아닌 문자 그 자체로 매치하고 싶은 경우에는\^
, \$
로 사용하면 된다.>>> print(re.search('short$', 'Life is too short, you need python'))
None
\A
는 문자열의 처음과 매치됨을 의미\Z
는 문자열의 끝과 매치됨을 의미>>> p = re.compile(r'\Bclass\B')
>>> print(p.search('the declassified algorithm'))
<re.Match object; span=(6, 11), match='class'>
>>> print(p.search('one subclass is'))
None
Method | 목적 |
---|---|
match() | 문자열의 처음부터 정규식과 매치되는지 조사한다. |
search() | 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. |
findall() | 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴한다. |
finditer() | 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 리턴한다. |
Method | 목적 |
---|---|
group() | 매치된 문자열을 리턴한다. |
start() | 매치된 문자열의 시작 위치를 리턴한다. |
end() | 매치된 문자열의 끝 위치를 리턴한다. |
span() | 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 리턴한다. |
re.DOTALL
or re.S
- . 이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다.re.IGNORECASE
or re.I
- 대소문자에 관계없이 매치할 수 있도록 한다.re.MULTILINE
or re.M
- 여러줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다)re.VERBOSE
or re.X
- verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들수 있고 주석등을 사용할 수 있게된다.)1) \section
: \s
로 인해 whitespace 문자와 매치 - [ \t\n\r\f\v]ection
2) \\section
이스케이프 처리하지만 파이썬 정규식 엔진(정규식을 해석하고 수행하는 모듈)에는 파이썬 문자열 리터럴 규칙에 따라 \\
이 \
로 변경되어 \section
이 전달 → Raw String로 해결
# Raw String 사용
>>> p = re.compile(r'\\section')
Reference
1) https://wikidocs.net/16475
2) https://wikidocs.net/4308