코딩공부/점프 투 파이썬

## 점프 투 파이썬 - 정규 표현식 시작하기 ( 2 )

integerJI 2020. 4. 25. 14:11

## 점프 투 파이썬 - 정규 표현식 시작하기 ( 2 )

출처 : https://wikidocs.net/4308

# 파이썬에서 정규 표현식을 지원하는 re 모듈

re(regular expression) 모듈은 자동으로 설치되는 기본 라이브러리이며 정규 표현식을 지원하기 위해 만들어 졌다.

import re
p = re.compile('ab*')

re.compile를 사용하여 정규 표현식을 컴파일한다.
re.compile의 결과로 돌려주는 객체 p(컴파일된 패턴 객체)를 사용하여 그 이후의 작업을 수행

※ 정규식을 컴파일할 때 특정 옵션을 주는 것도 가능한데, 이에 대해서는 뒤에서 자세히 살펴본다.
※ 패턴이란 정규식을 컴파일한 결과이다.


# 정규식을 이용한 문자열 검색

Method 목적
match() 문자열의 처음부터 정규식과 매치되는지 조사한다.
search() 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
findall() 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
finditer() 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.

match, search는 정규식과 매치될 때는 match 객체를 돌려주고, 매치되지 않을 때는 None을 돌려준다. 

match는 정규식의 검색 결과로 돌려주는 객체이다.

ex)
import re
p = re.compile('[a-z]+')

 - match
m = p.match("python")
print(m) >>> <_sre.SRE_Match object at 0x01F3F9F8>

# "python" 문자열은 [a-z]+ 정규식에 부합되므로 match 객체를 돌려준다.

m = p.match("3 python")
print(m) >>> None

# "3 python"은 3때문에 걸려서 None가 나온다.

# 일반적인 정규식 프로그램의 흐름
p = re.compile(정규표현식)
m = p.match( 'string goes here' )
if m:
    print('Match found: ', m.group())
else:
    print('No match')

# match의 결과값이 있을 때만 다음 작업을 수행하게 한다.

 - search
m = p.search("python")
print(m) >>> <_sre.SRE_Match object at 0x01F3FA68>

# "python" 문자열에 search 메서드를 수행하면 match 메서드를 수행했을 때와 동일

m = p.search("3 python")
print(m) >>> <_sre.SRE_Match object at 0x01F3FA30>

# "3 python" 문자열 전체를 검색하기 때문에 "3 " 이후의 "python" 문자열과 매치

 - findall
result = p.findall("life is too short")
print(result) >>> ['life', 'is', 'too', 'short']

# "life is too short" 문자열의 'life', 'is', 'too', 'short' 단어를 각각 [a-z]+ 정규식과 매치해서 리스트로 돌려준다.

 - finditer
result = p.finditer("life is too short")
print(result) >>> 
for r in result: print(r)
>>> 
<_sre.SRE_Match object at 0x01F3F9F8>
<_sre.SRE_Match object at 0x01F3FAD8>
<_sre.SRE_Match object at 0x01F3FAA0>
<_sre.SRE_Match object at 0x01F3F9F8>

# finditer는 findall과 동일하지만 그 결과로 반복 가능한 객체(iterator object)를 돌려준다. 반복 가능한 객체가 포함하는 각각의 요소는 match 객체이다.

 

 

 

오랜만에 공부