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__' ... ]
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_', ...]
'''
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 주소값이다