Python

[Python] text 검색 기본 function: re.search/re.findall/re.finditer

시키테이 2020. 9. 8. 06:35
반응형

오늘은 특별한  library 없이 해당 문서에서 특정 단어를 찾아내는 방법을 알아보고자 합니다. 가장 기본은 in을 통해서 쓰는 겁니다. 아래처럼

"phone" in "this is my phone"

결과는 당연히 True가 나옵니다. 

 

조금 더 긴 문장으로 하고 변수로 지정해본 다음에 테스트하면? 

myphone="My phone is 833-745-2155 and my wife's one is 833-222-4901."
"833" in myphone

역시 True로 나오겠죠. 두번이 있으니 833이. 

 

그런데 이것보다 조금 더 자연스럽게  function을 이용해서 찾아주는 방식이 있는데요. 파이썬 기본 라이브러리인 re (Regular expression operation)에서 search를 통해서 찾는 겁니다. 아래처럼 하면 좀 더 간지 있겠죠? ^^ #re.search

import re 
number="833"
re.search(number, myphone)

이 검색의 다양한 정보를 알고 싶으면 다음과 같이 변수로 지정해서 span, end, start등을 알아볼 수도 있습니다.

mysearch=re.search(number, myphone)
mysearch.span()
mysearch.end()
mysearch.start()

그런데 re.search의 한계 중 하나는 일치하는 결과 하나만 낸다는 거죠. 여러개가 있을 땐 어떡해야 할까요? 이 경우에 쓰는 함수가 re.findall입니다. 

re.findall(number, myphone)

이렇게 하면 결과가 833을 두 번 알려줍니다. 다시 몇 번 833이 나오는지 알고 싶으면

len(findall(number, myphone))

결과가 2가 나오는 걸 알 수 있습니다. 두 번 나온다는 얘기죠. 

 

그럼 한 단계 더 나아가서 2가 정확하게 어떤 위치에 있냐 이걸 알고 싶으면, re.finditer입니다. 

for match in re.finditer(number, myphone):
    print (match)

이렇게 하면 결과가 아래와 같이 나옵니다. 위치를 정확하게 알려주죠? 

텍스트는 기본적으로 in으로 시작해서 re.search, re.findall, re.finditer를 사용한다는 건 잊지 마시고 다음엔 특정 문자나 숫자가 아니라 특정 포맷이 나오는 경우를 보도록 하겠습니다. 

반응형