사용자 도구

사이트 도구


kb:pythonregularexpression

Python Regular Expression

파이썬 정규식 관련 기능은 re 모듈에 들어있다. 컴파일해서 사용할 수도 있고, 바로 사용할 수도 있는데, 자세한 것은 파이썬 매뉴얼을 참고.

검색

검색에는 match, search, findall, finditer 이 4가지 함수를 이용할 수 있다.

match 함수는 문자열의 제일 앞쪽부터 주어진 정규식과 일치하는지를 검사한다. 정규식과 일치한다면 MatchObject를 반환하고, 일치하지 않는다면 None을 반환한다.

match(pattern, string[, flags]) 
import re
print(re.match("[a-z]+", "abcd"))
print(re.match("[a-z]+", "abcd12"))
print(re.match("[a-z]+", "12abcd"))
print(re.match("[a-z]+", "1234"))
<_sre.SRE_Match object at 0x00B368E0>
<_sre.SRE_Match object at 0x00B368E0>
None
None

MatchObject의 기능은 다음과 같다.

함수 목적
group(index) 정규식과 일치하는 부분의 문자열을 반환한다.
start(index) 일치하는 부분이 원래 문자열에서 차지하는 시작 인덱스를 반환한다.
end(index) 일치하는 부분이 원래 문자열에서 차지하는 끝 인덱스를 반환한다.
span(index) 일치하는 부분의 시작과 끝 인덱스를 반환한다.

함수 인자로 들어가는 값은 index 값은 그룹화된 정규식일 경우, 해당하는 그룹의 인덱스다. 주지 않을 경우 기본값으로 0을 사용한다.

import re
m = re.match("[a-z]+", "abcd12")
print(m.group())
print(m.start(0))
print(m.end(0))
print(m.span())
abcd
0
4
(0, 4)

search 함수는 문자열의 처음이 아니라, 전체를 검사한다는 점을 빼면 match 함수와 크게 다를 것이 없다.

search( pattern, string[, flags]) 
import re
m = re.search("[a-z]+", "12abcd")
print(m.group())
print(m.span())
abcd
(2, 6)

findall 함수는 정규식과 일치하는 모든 문자열들을 찾아, 그 문자열들을 리스트로 반환한다.

findall( pattern, string[, flags]) 
import re
list = re.findall("[a-z]+", "abcd12efgh")
print(list)
['abcd', 'efgh']

finditer 함수는 문자열 대신에 MatchObject의 리스트를 반환한다.

finditer( pattern, string[, flags]) 
import re
list = re.finditer("[a-z]+", "abcd12efgh")
for match in list:
    print(match.span())
(0, 4)
(6, 10)

치환

치환에는 split, sub, subn 이 3가지 함수를 이용할 수 있다.

split 함수는 주어진 정규식을 기준으로 문자열을 나누어, 그 리스트를 반환한다. 괄호를 쓰지 않으면 정규식과 일치하는 부분의 문자열은 날아간다.

split( pattern, string[, maxsplit = 0]) 
import re
list = re.split("[a-z]+", "abcd12efgh")
print(list)
['', '12', '']
import re
list = re.split("([a-z]+)", "abcd12efgh")
print(list)
['', 'abcd', '12', 'efgh', '']

sub 함수는 정규식과 일치하는 부분의 문자열을 주어진 문자열로 치환한다.

sub( pattern, repl, string[, count]) 
import re
list = re.sub("([a-z]+)", "wxyz", "abcd12efgh")
print(list)
wxyz12wxyz

subn 함수는 반환값이 ('치환한 문자열', 치환 횟수)의 튜플이라는 점만 빼고는, sub 함수와 똑같다.

subn( pattern, repl, string[, count]) 
import re
list = re.subn("([a-z]+)", "wxyz", "abcd12efgh")
print(list)
('wxyz12wxyz', 2)

링크

kb/pythonregularexpression.txt · 마지막으로 수정됨: 2014/11/09 21:00 (바깥 편집)