본문 바로가기

인문학도 개발일지/웹프로그래밍

[python] 점프투파이썬 정규표현식 지원 모듈: re

re 모듈

- regular expression의 약어

- 파이썬 설치시 자동 설치되는 기본 라이브러리

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

- re.compile을 사용하여 정규표현식 컴파일

- re.compile의 결과로 돌려주는 객체를 사용하여 그 이후의 작업 수행

 

 

 

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

- 컴파일된 패턴 객체가 제공하는 메서드

method

목적

match()

문자열의 처음부터 정규식과 매치되는지 조사

search()

문자열 전체를 검색하여 정규식과 매치되는지 조사

findall()

정규식과 매치되는 모든 문자열을 리스트로 반환

finditer()

정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환

 

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

 

 

match 메서드 수행

m = p.match("python")
print(m)
# 정규식에 부합

>> <_sre.SRE_Match object at 0x01F3F9F8>

m = p.match("3 python")
print(m)
# 문자3이 정규식에 부합 X

>> None

 

- match의 결과로 match객체 또는 None을 돌려주므로 보통 다음과 같은 흐름으로 작성

p = re.compile(정규표현식)
m = p.match('string goes here')
if m:
    print('Match found: ', m.group())
else:
    print('No match')

 

 

search 메서드 수행

m = p.search("python")
print(m)

>> <_sre.SRE_Match object at 0x01F3FA68>

m = p.search("3 python")
print(m)

>> <_sre.SRE_Match object at 0x01F3FA30>

 

 

 

findall 메서드 수행

result = p.findall("life is too short")
print(result)

>> ['life', 'is', 'too', 'short']

 

 

finditer

result = p.finditer("life is too short")
print(result)

>> <callable_iterator object at 0x01F5E390>

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>

 

 

 

match 객체의 메서드

- 어떤 문자열이 매치되었는지, 매치된 문자열의 인덱스는 어디서부터 어디까지인지 확인

method

목적

group()

매치된 문자열 반환

start()

매치된 문자열의 시작 위치 반환

end()

매치된 문자열의 끝 위치 반환

span()

매치된 문자열의 (시작, 끝)에 해당하는 튜플 반환

- 예

m = p.match("python")
print(m.group())
print(m.start())
print(m.end())
print(m.span())

>> 'python'
>> 0
>> 6
>> (0, 6)

- search 메서드와 비교

m = p.search("python")
print(m.group())
print(m.start())
print(m.end())
print(m.span())

>> 'python'
>> 2
>> 8
>> (2, 8)

 

 

더보기

[re 모듈]

p = re.compile('[a-z]+') 
m = p.match("python")

위 코드의 축약

m = re.match('[a-z]+', "python")

 

 

 

컴파일 옵션

DOTALL(S)

- .이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록

 

 

IGNORECASE(I)

- 대소문자 관계없이 매치

 

 

MULTILINE(M)

- 여러줄과 매치할 수 있도록(^, $ 메타문자의 사용과 관계가 있는 옵션)

 

 

VERBOSE(X)

- verbose 모드를 사용할 수 있도록(정규식을 보기 편하게, 주석 사용 가능하게)