python 정규표현식 findall(), finditer()

박은정·2021년 7월 28일
0

TIL

목록 보기
8/72
post-custom-banner

코드1

import re

정규표현식 = r'([a-zA-Z]+) : (Wd+)'

문자열 = 'name : leehojun. age : 10. height : 180, email : paul-lab@naver.com'

결과 = re.findall(정규표현식, 문자열)

findall() 메서드의 리턴값

print(type(결과))

# <class 'list'>

print(결과)

# [('age', '10'), ('height', '180')]

튜플값을 가지고 있는 리스트으로 반환한다

리스트 안의 튜플값은 → 딕셔너리형으로 변환할 수도 있다

re.search() 메서드에서는 더 이상 찾지 않고 첫번째로 매칭되는 패턴만 찾고 끝났는데
re.findall() 메서드의 경우 매칭되는 모든 패턴값을 찾는다

findall() 메서드의 리턴값

딕셔너리로 변환을 하면 → 이후에 여러가지로 이용가능하다

print(dict(결과))
# {'age' : '10', 'height' : '180'}

dir() 내장함수

어떤 객체를 인자로 넣어주면 → 해당 객체가 어떤 변수와 메소드(method)를 가지고 있는지 리스트로 나열해준다

print(dir(결과))

# ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__' ... ]

코드2

import re

정규표현식 = r'([a-zA-Z]+) : (Wd+)'

문자열 = 'name : leehojun. age : 10. height : 180, email : paul-lab@naver.com'

결과 = re.finditer(정규표현식, 문자열)

print(결과)

# <callable_literator at 0x7fd889cd50>

finditer() 메서드의 리턴

  • 오브젝트로 출력된다
  • 순회 가능 (= 반복문 사용가능)
print(type(결과))

# <class 'callable_iterator'>

finditer() 메서드 리턴값의 순회

정규식에서 매칭된 값 출력됨

for i in 결과:
   print(i)

'''
<re.Match object: span=(17, 25), match='age : 10'>
<re.Match object: span=(27, 39), match='height : 180'>
'''

그래서 이 i 값의 type값을 보면
앞선 튜토리얼1의 결과 <class re'Match'>와 동일하다

for i in 결과:
   print(i)
   print(type(i))
   print(dir(i))
   
'''
실행결과
<re.Match.object: span=(17, 25), match='age : 10'>
<class 're.Match'>
['_class_', '_copy_', '_deepcopy_', '_delattr_', '_dir_', ...]
<re.Match object: span=(27, 39), match='height : 180'>
<class re'Match'>
['_class_', '_copy_', '_deepcopy_', '_delattr_', '_dir_', ...]
'''
  • 한번 순회되면 끝이기 때문에 두 번째로 for문을 실행하면 아무결과가 나오지않는다
  • 이는 iterator를 공부해야 이해가 가능한데 일단 한번만 순회가 가능하다고 이해하자
  • 이럴때는 위의 import문 을 다시 실행하고 다시 실행하면 순회가 된다
for i in 결과:
   print(i)
   print(i.start(), i.end())
   print(i.group())

'''
실행결과
<re.Match object: span=(17, 25), match= 'age : 10'>
17 25
age : 10
<re.Match object: span=(27, 39), match='height : 180'>
27 39
height : 180
'''

17 25, 27 39는 매칭된 string 주소값이다

profile
새로운 것을 도전하고 노력한다
post-custom-banner

0개의 댓글