본문 바로가기
Python

[Python] 정규 표현식(3)

by 찬'story 2021. 7. 8.

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