정규표현식을 모르고 있는 사람은 아래 포스팅을 읽고 오자
2021.04.17 - [정보보안-이론] - 정규표현식에 대하여
필자도 정규표현식을 많이 안 써봤지만. Python도 정규표현식을 당연히 지원한다. re(Regular Expression)이라는 모듈을 알아보자.
Python에서 re사용법
POSIX와 거의 동일하다. 아래는 Python에서 패턴문자가 의미하는 것이다.
패턴문자 | 설명 |
. | New line을 제외한 모든 문자, 플래그중에 re.DOTALL이 있는데, 이게 설정되면 new line을 포함한 모든 문자가 된다. |
^ | 문자열의 처음에 일치하는 패턴, re.MULTILINE이 설정되면, 각라인마다 첫 패턴을 검색한다. |
$ | 문자열의 끝에 일치하는 패턴, re.MULTILINE이 설정되면, 각라인마다 첫 패턴을 검색한다. |
* | 해당하는 패턴의 0번이상 반복을 탐색 |
+ | 해당하는 패턴의 1번이상 반복을 탐색 |
? | 해당하는 패턴의 0번 혹은 1번 매칭을 탐색 |
{m} | 해당하는 패턴의 m번의 반복을 탐색 |
{m,n} | 해당하는 패턴의 m번 이상 n번 이하 반복을 탐색 |
{m,n}? | 해당하는 패턴의 m번 이상 n번 이하 반복중 최소길이 값을 탐색 |
\ | 이스케이프 지시자 |
[] | 대괄호안에들어간 문자중 하나를 선택 |
| | 파이프기호, 좌변과 우변중하나를 선택 |
re객체의 사용
Python에서 정규표현식을 사용하기 위해서는 우선 정규표현식객체를 생성해야 된다. compile 명령을 다음과 같이 사용한다.
>>> import re
>>> re_object = re.compile("a{3}.*c$")
### re.compile(pattern)으로 사용한다.
### 위 패턴은 3번의 a반복과 0번이상의 아무문자 c로 끝나는 패턴들이다.
이렇게 생성이 된 re객체는 다음과 같은 식으로 사용될 수 있다.
match
>>> pat = re_object.match("aaaddc")
>>> pat
<re.Match object; span=(0, 6), match='aaaddc'>
### 문자열 aaaddc는 re_object의 패턴과 정합하니 pat을 생성한다.
>>> pat = re_object.match("a4aaddc")
>>> pat
None
### 문자열 a4aaddc는 re_object의 패턴과 정합하지 않으니, pat이 None이다.
match로 생성된 match객체는 다음과 같은 method를 가진다.
match.group() : 정합된 문자열을 반환한다.
match.start() : 정합된 문자열의 시작위치를 반환한다.
match.end() : 정합된 문자열의 마지막위치를 반환한다.
match.span() : 정합된 문자열 위치의 (시작, 끝)을 튜플로 반환한다.
* match객체를 아래처럼 바로 생성할 수 있다.
>>> re_object = re.match("(a{3}.)c$", "aaabbc")
search
>>> pat = re_object.search("123 aaaddc")
>>> pat
<re.Match object; span=(4, 10), match='aaaddc'>
### search는 패턴에 정합하는 문자열의 위치를 span(튜플임당)구조로 알려준다
findall
>>> re_object = re.compile("a{3}.c")
>>> pat = re_object.findall("aaabbc 123 aaaeec 123")
>>> print(pat)
["aaabbc", "aaaeec"]
### findall은 패턴에 부합되는 모든 결과를 list로 반환한다.
### 좋은 설명을 위해서 re_object를 다시 생성하였다.
finditer
>>> re_object = re.compile("a{3}.c")
>>> pat = re_object.finditer("aaabbc 123 aaaeec 123")
>>> pat
<callable_iterator object at 0x000001E22720F5E0>
### findall과 같은데, iterable한 객체를 반환한다. 객체는 하나하나가 match로 yield된다.
정규식 생성의 옵션
다음과 같은 옵션들이 있다.
1. VERBOSE, X : 정규식을 여러 줄로 적고, 주석을 달아 세부적인 설명이 가능토록 해준다.
2. MULTILINE, M : 시작검색(^)이나 끝 검색($)이 여러 줄에(new line으로 구분되는) 각 줄에 해당되게 해 준다.
3. IGNORECASE, I : 대소문자 구별 없이 검색을 하게 해 준다.
4. DOTALL, S : 점(.)이 New Line을 포함해서 검색할 수 있게 해 준다.
* 출처 : Python API docs.python.org/3/library/re.html
re모듈의 사용법에 대해 알아보았다. 정규표현식을 잘 사용하시는 분들의 것을 보면 무슨 암호문 같다. 사용법을 알고 능숙하게는 사용하지는 못하더라도, 읽을 수 있는 정도는 알아두자.
'Python > Python 모듈탐구' 카테고리의 다른 글
[Python] - 모듈탐구 pydoc - Python의 백과사전 (0) | 2021.04.25 |
---|---|
[Python] - 모듈탐구 webbrowser - 인터넷세상에 온걸 환영해 (0) | 2021.04.25 |
[Python] - 모듈탐구 string과 Formatter - 문자열 자유자재로 다루기 (0) | 2021.04.17 |
[Python] - 모듈탐구 sys - 우리 Python 해부하기 (0) | 2021.04.11 |
[Python] - 모듈탐구 os - Python으로 내 컴퓨터 조작하기 (0) | 2021.04.11 |