일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Apache
- PySpark
- array
- Tkinter
- GIT
- math
- 파이썬
- matplotlib
- gas
- Kotlin
- PostgreSQL
- SQL
- Python
- Java
- Github
- c#
- dataframe
- Google Excel
- Excel
- google apps script
- hive
- string
- django
- Google Spreadsheet
- Mac
- list
- Redshift
- PANDAS
- numpy
- Today
- Total
달나라 노트
Python re : findall (문자열 찾아내기. 일정 패턴의 문자열 찾기.) 본문
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해준다는 차이점이 있습니다.
'Python > Python re' 카테고리의 다른 글
Python re : search (특정 패턴의 텍스트 찾아내기) (0) | 2021.03.29 |
---|---|
Python re : sub (0) | 2021.03.10 |