Sangmun

정규표현식 기초 python re 모듈 본문

개발/정규표현식

정규표현식 기초 python re 모듈

상상2 2023. 1. 22. 14:00

파이썬에서는 정규표현식을 지원하는 re(regular expression) 모듈이 있으며 기본 모듈임으로 따로 설치할 필요는 없다.

 

정규표현식을 지정해서 아래와 같이 컴파일을 해서 패턴을 지정해 준다.

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

1. RE 모듈 기본 함수

문자열을 검색할 수 있는 함수는 아래와 같이 4개가 있다.

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

* 예시

아래와 같은 알파벳 소문자가 0부터 ~ 무한대까지 반복될 수 있는 패턴을 만든다고 하면

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

 

문자열 'python'은 그에 부합함으로 매치된 결과를 match 객체로 리턴해준다.

m = p.match("python")
print(m)
<re.Match object; span=(0, 6), match='python'>

하지만 '3 python'은 문자열의 시작이 알파벳 소문자가 아닌 '3' 문자열로 시작함으로 매칭이 되지 않아 None을 리턴한다.

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

반면에 search 함수는 처음부터 검색을 하는 것이 아니라 문자열 전체를 대상으로 검색을 한다.

'3 python' 문자열을 대상으로 매칭이 되는 문자열을 찾아서 리턴을 해주는 결과를 확인할 수 있다.

m = p.search("python")
print(m)
<re.Match object; span=(0, 6), match='python'>

m = p.search("3 python")
print(m)
<re.Match object; span=(2, 8), match='python'>

 

findall 함수는 매칭이 되는 대상 전부를 찾아서 리스트로 리턴을 해준다.

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

 

finditer 함수는 findall 함수와 같지만 리턴되는 대상이 리스트가 아니라 match 객체로 리턴해주며 iter 하면서 결과를 확인할 수 있다.

result = p.finditer("life is too short")
print(result)
<callable_iterator object at 0x01F5E390>

 for r in result: print(r)
<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'>

2. match 객체의 매써드

re 모듈의 함수를 사용하여 반환된 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)

 

3. 컴파일 옵션

정규 표현식을 사용할 때 컴파일 할때 다양한 옵션을 사용할 수 있다.

  • DOTALL(S) -.이 줄 바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다.
  • IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 한다.
  • MULTILINE(M) - 여러 줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다)
  • VERBOSE(X) - verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들 수 있고 주석 등을 사용할 수 있게 된다.

 

※ 파이썬 re 모듈 모듈단위로 수행하기

위의 예시들은 정규표현식을 컴파일하고 매치를 실시하였으나 축약된 형태로 사용이 가능하다.

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

위와 같이 한 줄에 사용하는 것이 가능하나 특정 패턴 객체를 지속적으로 사용해야 하는 경우에는 위와 같이 컴파일을 하고 실행하는 것이 더 좋다.

 

https://wikidocs.net/4308

 

08-2 정규 표현식 시작하기

[TOC] ## 정규 표현식의 기초, 메타 문자 정규 표현식에서 사용하는 메타 문자(meta characters)에는 다음과 같은 것이 있다. > 메타 문자란 원래 그 문자…

wikidocs.net

 

'개발 > 정규표현식' 카테고리의 다른 글

정규표현식 심화  (0) 2023.01.23
정규표현식 기초 (메타문자)  (0) 2023.01.22
Comments