달나라 노트

Python re : findall (문자열 찾아내기. 일정 패턴의 문자열 찾기.) 본문

Python/Python re

Python re : findall (문자열 찾아내기. 일정 패턴의 문자열 찾기.)

CosmosProject 2022. 9. 7. 19:38
728x90
반응형

 

 

 

Python re library의 findall method는 문자열 내에서 특정 패턴을 만족하는 모든 문자열을 return해줍니다.

 

 

 

Syntax

findall(pattern, text)

 

- pattern

찾을 문자열의 pattern을 입력하는 부분입니다.

 

 

- text

문자열을 찾을 대상 텍스트를 의미합니다.

 

 

 

정리해보면 text에서 pattern과 일치하는 부분을 모두 찾아 return해주는 것이 findall method의 기능이라고 볼 수 있습니다.

 

 

 

 

 

 

 

import re

str_text = 'apple_banana'

list_result = re.findall(r'apple', str_text)
print(list_result)



-- Result
['apple']

 

위 코드는 apple_banana 라는 텍스트에서 apple이라는 문자를 찾아 return합니다.

 

r'apple' 패턴으로 이와 같은 패턴이 적혀있는데 별도로 특수한 패턴 기호가 들어가있지 않으므로 apple이라는 글자 그 자체를 찾게 됩니다.

 

apple_banana 텍스트에는 apple이라는 글자가 하나 존재하므로 list 속에 찾아진 apple이 담겨져서 return됩니다.

 

 

 

 

 

import re

str_text = 'apple_banana_pineapple_april'

list_result = re.findall(r'apple', str_text)
print(list_result)




-- Result
['apple', 'apple']

 

이번에는 str_text를 바꿔보았습니다.

apple_banana_pineapple_april

위 텍스트에서 apple이란 글자를 찾는 것이 위 코드의 결과입니다.

 

보시면 apple이라는 글자가 2개 찾아지죠.

가장 앞에 apple과 pineapple 쪽에 포함된 apple이 있습니다.

 

따라서 그 결과는 찾아진 2개의 apple이라는 글자가 list 속에 담겨져서 return되게 됩니다.

 

 

 

 

 

 

 

 

 

import re

str_text = 'apple_banana_pineapple_april'

list_result = re.findall(r'ap[a-z]{2}', str_text)
print(list_result)



-- Result
['appl', 'appl', 'apri']

 

이번에는 findall method의 pattern인자에 패턴 기호를 사용해봤습니다.

 

- r'ap[a-z]{2}'

위 패턴기호를 해석해보면

ap라는 글자로 시작하며, a부터 z까지의 소문자 알파벳 2개{2}가 뒤이어 나오는 문자열을 탐색하라는 의미입니다.

 

예를들어 appl, apbc, apzc, apem 등 ap로 시작하고 그 뒤에 알파벳 소문자 2개가 나오는 패턴을 가진 모든 문자열을 찾으라는 의미이죠.

 

 

- apple_banana_pineapple_april

여기서 위 패턴에 일치하는 부분을 모두 찾으면 아래와 같이 총 3개가 찾아집니다..

appl

appl

apri

 

그래서 결과를 보면 위 3개의 텍스트가 list에 담겨져서 return됩니다.

 

 

 

 

 

 

import re

str_text = '''
apple_banana_pineapple_april
application_baron_bail_approach
appreciate_approve_apology_apocalypse
'''

list_result = re.findall(r'ap[a-z]{2}', str_text)
print(list_result)



-- Result
['appl', 'appl', 'apri', 'appl', 'appr', 'appr', 'appr', 'apol', 'apoc']

 

여러 줄로 구성된 text에도 적용할 수 있습니다.

 

 

 

 

 

 

 

여기까지 보면 re의 search method와 비슷하다는 것을 알 수 있습니다.

 

search method도 findall 처럼 특정 패턴을 어떠한 텍스트 속에서 찾아서 return해주거든요.

 

re.search 관련 내용 = https://cosmosproject.tistory.com/247

 

import re

str_text = 'apple_banana_april'

list_result = re.findall(r'ap[a-z]{2}', str_text)
print('findall result ->', list_result)

list_result = re.search(r'ap[a-z]{2}', str_text)
print('search result ->', list_result.group())



-- Result
findall result -> ['appl', 'apri']
search result -> appl

 

위 결과는 동일한 text에 대해 동일한 pattern을 찾게한 결과입니다.

 

다른 점은 findall, search method 2개를 사용했다는 것이죠.

 

두 method는 기본적으로 특정 텍스트 안에서 어떠한 패턴을 가진 문자열을 찾아낸다는 기능을 가집니다.

 

하지만 findall은 찾아진 모든 문자열을 list 속에 묶어서 return해주고, search는 가장 처음 찾아진 문자열만을 return해준다는 차이점이 있습니다.

 

 

 

 

 

 

728x90
반응형

'Python > Python re' 카테고리의 다른 글

Python re : search (특정 패턴의 텍스트 찾아내기)  (0) 2021.03.29
Python re : sub  (0) 2021.03.10
Comments