re모듈
정규표현식을 파이썬 소스코드에 적용하려면 re모듈을 사용해야한다.
re모듈의 메서드
메서드이름 탐색범위 결과
match(정규표현식,문자열) 문자열 처음부터 검색 match object, none
search()메서드 문자열 전체를 검색 match object, none
findall() 문자열 전체를 검색 문자열리스트, 빈리스트
finditer() 문자열 전체를 검색 match object iterator, none
fullmatch() 패턴과 문자열이 남는부분없이 완벽일치 match objet 1개, none
match객체의 메서드
re모듈의 메서드의 결과로 match객체(object)가 나오고 그 결과에 대한 메서드
group()
매칭된 문자열 반환 people
start()
매칭된 문자열의 시작위치 5
end()
매칭된 문자열의 끝 위치 11
span()
매칭된 문자열의(시작,끝)튜플 (5,11)
#re모듈
import re
#re모듈 메서드
str = "love people around you, love your work, love yourself"
#1) match 문자열의 처음부터 검색(결과: 1개의 match object)
result = re.match("love", str)
print(result)
=> <re.Match object; span=(0, 4), match='love'>
#2) search 문자열의 전체를 검색(결과 : 1개의 match object)
result = re.search("people", str)
print(result)
=><re.Match object; span=(5, 11), match='people'>
#3) findall 문자열의 전체를 검색(결과 : 문자열리스트)
result = re.findall("love", str)
print(result)
=>['love', 'love', 'love']
#4) finditer 문자열의 전체를 검색(결과 : match 객체 이터레이터)
result = re.finditer("love", str)
for i in result:
print(i)
=><re.Match object; span=(0, 4), match='love'>
<re.Match object; span=(24, 28), match='love'>
<re.Match object; span=(40, 44), match='love'>
#5) fullmatch 패턴과 문자열이 완벽하게 일치하는지 일치
result = re.fullmatch("love people around you, love your work, love yourself", str)
print(result)
=><re.Match object; span=(0, 53), match='love people around you, love your work, love your>
# 2. match object의 메서드
result = re.search('people', str) #결과 : 1개의 match object)
#1) group() : 매칭된 문자열을 반환
print(result.group())
=>people
#2) start() : 매칭된 문자열의 시작위치 반환
print(result.start())
=>5
#3) end() : 매칭된 문자열의 끝위치 반환
print(result.end())
=>11
#4) span() : 매칭된 문자열의 시작과 끝위치 튜플로 반환
print(result.span())
=>(5, 11)
*참고
전방탐색은 매치되는게 앞에 나오고 매치된거중 없애려는게 뒤에 나오는 경우 사용한다
후방탐색은 매치되는 거중 앞에 거를 없애고, 뒤에꺼를 매치시킬때
전방탐색에는 범위가 유동적이어도 된다
\d{2,3}-\d{3,4}-(?=\d{4})
후방탐색은 범위가 유동적이면 안된다.
(?<=\d{3}-\d{4}-)\d{4}
여기서 유동적인 것은 { }범위이다.
import re
#1. Group 그룹
#1)매칭되는 문자열이 한개
str1 = "010-1234-5678"
result = re.match("\d{2,3}-\d{3,4}-(\d{4})$", str1)
print(result.group())
print(result.group(0))
print(result.group(1)) #그룹의 첫번째가 나온다.
=>010-1234-5678
010-1234-5678
5678
print("========")
#2)매칭되는 문자열이 여러개
str2 = "010-1234-5678,010-1234-5368,010-1234-3528,010-1234-5638,010-1234-5581"
result = re.finditer("\d{2,3}-\d{3,4}-(\d{4})(?=,|$)", str2)
for i in result:
print(i.group(1))
5678
5368
3528
5638
5581
# 2. Substitution(교체)
str3= "010-1312-1111"
# result = re.sub("표현식", "대체문자", "string")
result = re.sub("(?<=\d{3}-\d{4}-)\d{4}", "****", str3)
print(result)
010-1312-****