저번 글에서는 메타문자에 대해서 알아보았다. 이번에는 파이썬 상에서 메타문자를 이용해서 정규표현식을 사용하는 방법에 대해 알아보겠다.
이번 글에서도 저번 글에 이어 점프 투 파이썬을 참고하며 공부했다.
파이썬 정규표현식 사용 방법
모듈 불러오기 import re
-
파이썬은
re모듈을 통해 정규표현식을 지원한다. 따라서 정규표현식을 사용하기 위해서는 다음과 같이import re해주어야 한다.import re p = re.compile('ab*') -
re.compile을 이용해 컴파일된 패턴 객체를p라는 변수에 담아 여러가지 방법으로 정규표현식을 이용할 수 있다.
문자열 검색
-
앞서 컴파일된 객체를 활용하여 문자열 검색을 할 수 있는데, 객체는 다음과 같은 메소드를 제공한다.
-
match(): 문자열의 처음부터 정규식과 매치되는지 조사한다. -
search(): 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. -
findall(): 정규식과 매치되는 모든 문자열을 리스트로 리턴한다. -
finditer(): 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 리턴한다.
-
문자열 검색 예제
앞서 소개한 문자열 검색 메소드에 대한 예제를 살펴보자.
가장 먼저, 패턴 객체를 하나 만들어야 한다.
import re
p = re.compile('[a-z]+')
이번에 만든 객체는 모든 문자에 대해서 1번 이상 반복되는 문자열을 의미한다.
match()
-
match는 문자열의 처음부터 정규식과 매치되는 지 조사한다.m = p.match('python') print(m) # <_sre.SRE_Match object; span=(0, 6), match='python'> -
만약 처음부터 정규식과 매치되지 않는다면
None을 반환한다.m = p.match('3 python') print(m) # None -
실제 코드에서
match메소드는 다음과 같은 방법으로 쓰인다고 한다.p = re.compile('[a-z]+') m = p.match('python') if m: print(m.group()) else: print('No match') -
코드에 나오는
m.group은 조금 있다 설명하겠다.
search()
-
search는 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.m = p.search('python') print(m) # <_sre.SRE_Match object; span=(0, 6), match='python'> -
search는 전체 문자열에서 검색하기 때문에match와 다르게, 처음에 매치되지 않는 문자가 있더라도 매치가 된다.m = p.search('3 python') print(m) # <_sre.SRE_Match object; span=(2, 8), match='python'> -
하지만
search경우에도, 아무 문자도 매치되지 않은 경우에는None을 반환한다.
findall()
-
findall은 정규식과 매치되는 모든 문자열을 리스트로 반환한다.result = p.findall('life is too short') print(result) # ['life', 'is', 'too', 'short']
[finditer()]
-
finditer은findall과 기능적으로는 같지만, 리턴값이 리스트가 아닌 반복 가능한 객체이다.result = p.finditer('life is too short') print(result) # <callable_iterator object at 0x11a3a0f28> for i in result: print(r) # <_sre.SRE_Match object; span=(0, 4), match='life'> # <_sre.SRE_Match object; span=(5, 7), match='is'> # <_sre.SRE_Match object; span=(8, 11), match='too'> # <_sre.SRE_Match object; span=(12, 17), match='short'>
match 객체의 메소드
-
앞서
match()와search()메소드의 결과값으로 얻은match객체는 다음과 같은 메소드를 가진다.-
group(): 매치된 문자열을 리턴한다. -
start(): 매치된 문자열의 시작 위치를 리턴한다. -
end(): 매치된 문자열의 끝 위치를 리턴한다. -
span(): 매치된 문자열의 (시작,끝)에 해당되는 튜플을 리턴한다.
-
-
예시
m = p.match('python') print(m.group()) # python print(m.start()) # 0 print(m.end()) # 6 print(m.span()) # (0,6)
컴파일없이 문자열 검색하기
-
패턴 객체를 여러번 사용해야 한다면 패턴 객체를 만들어놓고 여러번 사용하는 것이 편하다. 하지만 한번만 쓰는 경우라면, 컴파일과 문자열 검색을 동시에 하는 것이 편할 것이다.
-
다음과 같이
re모듈에서 직접match,search등의 메소드를 사용하면 된다.m = re.match('[a-z]+', 'python')
이번에는 파이썬 정규표현식 사용 방법에 대해서 알아보았다. 다음에는 컴파일 옵션에 대해 알아보겠다.