본문 바로가기

코딩/파이썬 표준 라이브러리

파이썬 표준 라이브러리 : re 라이브러리

 

re 라이브러리는 정규 표현식을 지원하여 패턴을 가지는 문자열을 분석 또는 조작하고자 할 때 사용할 수 있는 파이썬 표준 라이브러리입니다.

 

아래의 코드는 임의 문자열에 정의한 패턴('숫자3개-숫자4개-숫자4개')이 존재하는지를 검사하는 코드입니다.

 

import re

data = """
A001 010-0001-street1
A002 010-0002-street2
T003 010-0003-0003
T004 010-x004-0004
T005 010-0005-0005
T006 010-x006-0006
T007 010-0007-0007
"""

p = re.compile(r'\d{3}-\d{4}-\d{4}')
m = p.search(data)  # Match 객체를 반환
print(m)

if m:
    print(m.group())  # 일치하는 모든 문자열
    print(m.span())
    print(data[m.start():m.end()+1])
else:
    print('no match')

 

 

fillall() 함수를 이용하면 패턴과 일치하는 모든 문자열을 확인할 수 있습니다.

 

import re

data = """
A001 010-0001-street1
A002 010-0002-street2
T003 010-0003-0003
T004 010-x004-0004
T005 010-0005-0005
T006 010-x006-0006
T007 010-0007-0007
"""

p = re.compile(r'\d{3}-\d{4}-\d{4}')
m = p.findall(data)
for n in m:
    print(n)

 

 

만약 영문 대소문자를 구분하지 않고자 한다면 compile()의 매개변수 flags에 re.IGNORECASE를 입력합니다.

 

import re

data = """
미 FTC, 아마존 아이로봇 인수 관련 조사 착수
"""

# p = re.compile('ftc')
p = re.compile('ftc', re.IGNORECASE)
# p = re.compile('ftc', re.I)
m = p.findall(data)
for n in m:
    print(n)

 

제공 함수들

re.compile(pattern, flags=0)

정규 표현식(pattern)을 입력받아 Pattern 객체를 반환
re.search(pattern, string, flags=0)

string의 처음을 시작으로 pattern과 일치하는지 검사한 후 Match 객체를 반환
re.match(pattern, string, flags=0)

string 전체 내용에서 pattern과 일치하는 부분이 있는지를 검사한 후 Match 객체를 반환
re.findall(pattern, string, flags=0)

string 전체 내용에서 pattern과 일치하는 부분을 모두 찾은 후 반환
re.split(pattern, string, maxsplit=0, flags=0)

string에 대하여 pattern을 구분자로 하는 리스트를 반환
re.sub(pattern, repl, string, count=0, flags=0)

string에서 pattern과 일치하는 부분을 repl 내용으로 교체한 후 반환

정규 표현식

. newline을 제외한 임의 문자 1개

만약 flag로 re.DOTALL이 정의되면 newline도 포함
^ 문자열의 시작

re.search('^python', 'python hello')

만약 flag로 re.MULTILINE(또는 re.M)이 정의되면, 각 라인(행)이 해당 문자열로 시작하는지 설정
$ 문자열의 끝

re.search('python$', 'hello python')

만약 flag로 re.MULTILINE(또는 re.M)이 정의되면, 각 라인(행)이 해당 문자열로 끝나는지 설정
* 임의 문자가 0회 이상 반복
+ 임의 문자가 1회 이상 반복
? 임의 문자가 0회 또는 1회 사용됨
{m} 임의 문자가 m회 반복
{m,n}

또는 {m,}

또는 {,n}
임의 문자가 m~n회 반복

{m,}은 m 이상

{,n}은 n 이하
[ ] 문자의 집합
[ ] 내 문자 '-'으로 문자의 범위 정의가 가능 : (예) [a-z] , [0-5][0-9] , [0-9a-fA-F]
[-a] 또는 [a-] 또는 [a\-z]의 '-'는 문자 '-' 자체를 의미
[ ] 내 특수 문자( '(', ')', '+', '*' )는 특수 문자 자체를 의미
[ ] 내 첫번째 특수 문자 '^'는 이후 정의되는 문자를 제외한다는 의미
| A|B의 표현은 A 또는 B를 의미

re.match(r'Isaac|ISACC', 'Isaac Newton, physicist')
( ) 정규식을 그룹화함

re.match(r'(\w+) (\w+)', 'Isaac Newton, physicist')
\b \w와 \W 사이 경계(빈칸)을 명시

r'\bfoo\b'는 'foo', 'foo.', '(foo)', 'bar foo baz'와 일치하나 'foobar' 또는 'foo3'와는 일치하지 않음
\B \b의 반대
\d 숫자 -> [0-9]
\D 숫자가 아님 -> [^0-9]
\s 공백 -> [\t\n\r\f\v]
\S 공백이 아님 -> [^\t\n\r\f\v]
\w 문자 + 숫자 -> [a-zA-Z0-9]
\W 문자 + 숫자가 이님 -> [^a-zA-Z0-9]