이스케이프 문자: \(백슬래시, 키보드에서 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