re 모듈
파이썬은 정규 표현식을 지원하기 위해 re 모듈을 제공한다.
import re
p = re.compile('ab#')
re.compile을 사용하여 정규 표현식(위 예에서는 ab*)을 컴파일한다. re.compile의 결과로 돌려주는 객체 p를 사용하여 그 이후의 작업을 수행할 것이다.
*컴파일이란 어떤 언어의 코드를 다른 언어로 바꿔주는 과정. 대표적인 예는 C++ 코드를 기계어로 바꿔주는 것이다.
정규식을 사용한 문자열 검색
컴파일된 패턴 객체는 다음과 같은 4가지 메서드를 제공한다.
-match() : 문자열의 처음부터 정규식과 매치되는지 조사
-search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사
-findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려줌
-finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려줌
>>>p = re.compile('[a-z]+')
>>>m = p.match("python")
>>>print(m)
#"python" 문자열은 정규식에 부합하므로 match 객체를 돌려줌
<re.Match object; span=(0, 6), match='python'>
>>>m = p.match("3 python")
>>>print(m)
#"python" 문자열은 처음 나오는 문자 3이 정규식에 부합되지 않으므로 None을 돌려줌
None
>>>m = p.search("python")
>>>print(m)
<re.Match object; span=(0, 6), match='python'>
>>>m = p.search("3 python")
>>>print(m)
#search는 문자열의 처음부터 검색하는 것이 아니라 문자열 전체를 검식하기에 "3" 이후의 "python" 문자열과 매치된다.
<re.Match object; span=(2, 8), match='python'>
>>>result = p.findall("life is too short")
>>>print(result)
#각각의 단어를 [a-z]+ 정규식과 매치해서 리스트로 돌려준다
['life', 'is', 'too', 'short']
>>>result = p.finditer("life is too short")
>>>print(result)
<callable_iterator object at 0x000002415CF092B0>
>>>for r in result: print(r)
#finditer는 findall과 동일하지만, 그 결과로 반복 가능한 객체를 돌려준다.
<re.Match object; span=(0, 4), match='life'>
<re.Match object; span=(5, 7), match='is'>
<re.Match object; span=(8, 11), match='too'>
<re.Match object; span=(12, 17), match='short'>
match 객체의 메서드
match 메서드와 search 메서드를 수행한 결과로 돌려준 match 객체에 대해 알아보자.
match 객체의 메서드를 사용하면
- 어떤 문자열이 매치되었는가?
- 매치된 문자열의 인덱스는 어디부터 어디까지인가?
이와 같은 궁금증을 해결할 수 있다. ...????
메서드 | 목적 |
group() | 매치된 문자열을 돌려준다. |
start() | 매치된 문자열의 시작 위치를 돌려준다. |
end() | 매치된 문자열의 끝 위치를 돌려준다 |
span() | 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다. |
>>>import re
>>>p = re.compile('[a-z]+')
>>>m = p.match("python")
>>>m.group()
'python'
>>>m.start()
0
>>>m.end()
6
>>>m.span()
(0, 6)
match 메서드를 수행한 결과로 돌려준 match 객체의 start()의 결괏값은 항상 0일 수 밖에 없다. 왜냐하면 match 메서드는 항상 문자열의 시작부터 조사하기 때문이다.
'Python' 카테고리의 다른 글
Jupyter Notebook과 Git 연동 (0) | 2022.07.01 |
---|---|
[Python] 날짜 처리 방식 (0) | 2021.07.17 |
[Python] 정규 표현식(2) (0) | 2021.07.08 |
[Python] 정규 표현식(1) (2) | 2021.06.29 |
백준 온라인 저지(Baekjoon Online Judge) (0) | 2021.06.26 |