Python 심화16 - re모듈

do yeon kim·2022년 6월 8일
0

Python(심화)_fastcampus

목록 보기
16/24

re모듈

정규표현식을 파이썬 소스코드에 적용하려면 re모듈을 사용해야한다.

  • re모듈의 메서드
  • match객체의 메서드

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)

  • group(인덱스)
  • sub(문자열 교체)

*참고
전방탐색은 매치되는게 앞에 나오고 매치된거중 없애려는게 뒤에 나오는 경우 사용한다
후방탐색은 매치되는 거중 앞에 거를 없애고, 뒤에꺼를 매치시킬때

전방탐색에는 범위가 유동적이어도 된다
\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-****

https://fastcampus.co.kr/dev_online_pyweb

0개의 댓글