문자열 함수로 인덱스 찾기나 바꾸기 등은 가능합니다. 하지만 복잡한 조건을 처리할 때 정규표현식을 알면 굉장히 유용합니다. 파이썬에서 정규표현식을 사용할 수 있도록 도와주는 패키지는 pygrok과 re가 있습니다. 이 패키지를 이용해서 정규표현식을 처리하는 방법에 대해 알아보겠습니다.

 

 

파이썬에서 문자열을 처리할 때, 정규표현식을 알면 막강합니다. 문자열을 여러 가지 복잡한 조건으로 찾거나 바꾸기에 좋습니다. 정규표현식을 사용하기 위해서는 두 가지를 알아야 합니다. 하나는 정규표현식을 작성하는 방법, 그리고 관련 패키지를 사용하는 방법입니다.

 

1. pygrok

파이썬에 정규표현식을 사용하기 위해 알아볼 패키지는 re와 pygrok입니다. re는 파이선에 기본 내장된 모듈입니다. 문자열을 찾고 쉽게 변경할 수 있습니다. 만약 특정 문자열을 찾는 것이 목적이라면, pygrok을 사용하는 것이 더 쉽고 편리합니다. 아래와 같이 match함수를 이용하면 쉽게 찾고자 하는 문자를 찾을 수 있습니다.


다만 WORD가 띄워쓰기를 기반으로 인식하기 때문에 한국어보다는 영어에 적합합니다.

 

from pygrok import Grok
text = '철수 는 18 살이고, 밥 을 먹었다.'
pattern = '%{WORD:name} 는 %{NUMBER:age} 살이고, %{WORD:what} 을 먹었다.'
grok = Grok(pattern)
print(grok.match(text))

{'name': '철수', 'age': '18', 'what': '밥'}

 

WORD, NUBMER, BASE10NUM, IP, HOSTNAME, URIPATH, DATE같은 문자열의 패턴이 이미 내장되어 있어 원하는 문자열을 쉽게 찾을 수 있습니다. pygrok github 페이지에서 자세한 내용을 확인할 수 있습니다.

 

 

2. re

 

re를 이용하면 원하는 문자열을 찾고 변경하는 것이 가능합니다.

 

1) 문자열 찾기

re는 compile함수를 이용해서, 정규표현식을 컴파일 해야 합니다. 이후에 match, search, findall, finditer함수로 원하는 문자열을 찾을 수 있습니다.

 

  • match, 처음부터 찾기
  • search, 전체 문자열 찾기
  • findall, 모든 문자열 찾아서 리스트로 반환
  • finditer, 모든 문자열을 반복 가능한 객체로 반환

 

re를 이용해서 원하는 문자열을 검색하는 코드는 아래와 같습니다.

 

import re

text = '철수 는 18 살이고, 밥 을 먹었다.'
pattern = '\w+\s는'
p = re.compile(pattern)
m = p.match(text)
print(m)
 
print(re.compile(pattern).match(text))

 

match함수를 이용하고 나서 group, start, end, span을 이용하면 아래와 같이 다양한 방법으로 문자열을 찾을 수 있습니다.

 

  • group: matching된 문자열 반환
  • start: 시작위치 반환
  • end: 끝 위치 반환
  • span: 시작위치, 끝 위치 튜플로 반환

 

compile 할 때는 DOTALL, IGNORECASE, MULTILINE, VERBOSE 옵션을 사용할 수 있습니다. 이 중 가장 많이 사용하는 것은 IGNORECASE입니다. 대소문자 상관없이 매칭 할 수 있게 해 줍니다.

 

2) 문자열 변경하기

문자열을 변경하고 싶다면 sub함수를 이용합니다.

 

import re

text = '철수는 18 살이고, 밥 을 먹었다.'
pattern = '\w+는'

re.sub(pattern, '영희는' , text)


오늘은 파이썬 정규표현식 이용하기, re와 pygrok 패키지에 대해서 알아보았습니다. 다음 포스팅에서 실제 정규표현식을 작성하는 방법에 대해서 알아보겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기