Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[Python] 정규표현식 본문

Python

[Python] 정규표현식

mangdo 2021. 5. 19. 22:49

저번 포스팅에서는 정규표현식에 대해 알았습니다.

이어서 이번 포스팅에서는 정규표현식을 파이썬에서 어떻게 사용하는지에 대해 알아보겠습니다.


💡 정규표현식 with 파이썬

지금까지 정규표현식이란 무엇인지에 대해서 알아보았습니다.

지금부터는 이를 파이썬에서 어떻게 사용되는지에 대해서 알아보겠습니다.

파이썬에서는 정규표현식을 지원하는 re모듈을 제공합니다.

re모듈은 파이썬을 설치할때 자동으로 설치되는 기본 라이브러리로 사용법은 다음과 같습니다.

import re

p = re.compile('ab*') # 패턴객체 생성

이렇게 만든 패턴 객체를 사용하여 문자열을 검색하는 방법에는 4가지가 있습니다.

 

💡 match()

match 메서드는 문자열의 처음부터 정규식과 매치되는지 조사합니다.

import re

p = re.compile('[a-z]+')
m1 = p.match('hello world')
m2 = p.match('3hello')

매치된다면 매치 객체를 리턴하고, 매치되지 않는다면 None을 반환합니다.

 

💡 search()

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

import re

p = re.compile('[a-z]+')
m1 = p.search("hello world")
m2 = p.search("3hello")

 

💡 findall()

정규식과 매치되는 모든 문자열을 찾아서 리스트로 반환합니다.

import re

p = re.compile('[a-z]+')
m = p.findall('hello world')
print(m)

💡 finditer()

정규식과 매치되는 모든 문자열을 찾아서 반복가능한 객체(iterator object)로 돌려줍니다.

findall과 동일하지만 그 결과로 반복가능한 객체를 돌려줍니다. 반복가능한 객체가 가지고 있는 요소는 match객체 입니다.

import re

p = re.compile('[a-z]+')
m = p.finditer('hello world')
print(m)

 

 


💡 Match Object

 앞선 메소드들에서  match 객체를 반환하는 것을 확인할 수 있었습니다. Match object가 무엇인지 알아보기 위해 match objet의 메소드들에 대해 알아보겠습니다.

 

group() : 매치된 문자열을 반환합니다.

start() : 매치된 문자열의 시작 위치를 반환합니다.

end() : 매치된 문자열의 끝 위치를 반환합니다.

span() : 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 반환합니다.

import re

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

print(m.group())
print(m.start())
print(m.end())
print(m.span())

 

 

 

+) 패턴 객체 컴파일 옵션

패턴 객체를 컴파일 할때 다음 옵션을 사용할 수 있습니다.

- DOTALL(S) : .이 줄바꿈 문자를 포함하도록 모든 문자와 매치할 수 있도록 한다.

- IGNORECASE(I) : 대소문자와 상관없이 매치될 수 있도록 한다.

- MULTILIME(M) : 여러줄과 매치할 수 있도록 한다. 즉 ^, $ 메타 문자를 문자열의 각 줄마다 적용해주는 것이다.

- VERBOSE(X) : verbose모드를 사용하여 정규식을 보기편하게 만들고 주석을 사용할 수 있게된다.

 

p = re.compile('a.b', re.DOTALL)
# p = re.compile('a.b', re.S)
m = p.match('a\nb')

 


지금까지 내용들을 이용해서 코드로 작성하면 다음과 같습니다.

import re

p = re.compile('[a-z]+')
m = p.match('helloworld123')
if m:
    print('Match found: ', m.group())
else:
    print('No match')

import re

p = re.compile('[0-9]+')
m = p.search('helloworld123')
if m:
    print('Match found: ', m.group())
else:
    print('No match')