[Python] 정규표현식 - re모듈, match, search, findall, finditer

wony·2022년 10월 11일
post-thumbnail

정규표현식 - re 모듈

: 파이썬은 정규표현식을 지원하기 위해 regular expression(re) 모듈을 제공함(기본 라이브러리, 설치 필요 없음)

compile

import re 로 모듈을 사용하며,
p = re.complie('ab*) 와 같이 정규표현식을 컴파일한다.
반환값은 p(컴파일된 패턴 객체)이다.

문자열 검색

컴파일된 패턴 객체를 사용해 문자열을 검색할 수 있다.
패턴객체가 제공하는 4가지 메서드

메서드설명
match()문자열의 처음부터 정규식과 매치되는 지 조사하고, 매치되면? match객체 : None 반환
search()문자열 전체를 검색하여 정규식과 매치되는 지 조사하고, 매치되면? match객체 : None 반환
findall()정규식과 매치되는 모든 문자열을 리스트로 반환
finditer()정규식과 매치되는 모든 문자열을 반복가능한 객체로 반환

match

  • 문자열의 처음부터 정규식에 부합하는 지를 검사
	p = re.compile('[a-z]+')	# compile이 패턴 객체 p 반환
    
    m = p.match("python")	# p.match로 문자열("python") 검사
    # "python"은 [a-z]+에 부합하므로 match객체를 반환
    print(m)	# 확인해보면 
    >> <re.match object; span=(0,6), match='python'>
    
    m = p.match("3 python")	# p.match로 문자열("3 python") 검사
    # "3 python"은 처음에 나오는 '3'이 [a-z]+에 부합하지 않으므로 None을 반환
    print(m)	# 확인해보면 
    >> None
  • 문자열 전체를 검색하여 정규식에 부합하는 지를 검사
	p = re.compile('[a-z]+')	# compile이 패턴 객체 p 반환
    
    m = p.search("python")	# p.search 문자열("python") 검사
    # "python"은 [a-z]+에 부합하므로 match객체를 반환
    print(m)	# 확인해보면 
    >> <re.match object; span=(0,6), match='python'>
    
    m = p.search("3 python")	# p.search로 문자열("3 python") 검사
    # "3 python"은 처음은 '3'이지만 전체를 검색하기 때문에 뒤에 있는 'python'이 [a-z]+에 부합하므로 match객체를 반환
    print(m)	# 확인해보면 
    >> <re.match object; span=(2, 8), match='python'>

findall

  • 정규식과 매치되는 모든 문자열을 리스트로 반환
	# compile이 패턴 객체 p 반환
	p = re.compile('[a-z]+')	
    
    result = p.findall("life is too short")
    print(result)
    >> ['life', 'is', 'too', 'short']
    
    # 문자열에서 [a-z]+에 부합하는 문자열을  리스트로 반환

finditer

  • 정규식과 매치되는 모든 문자열을 반복가능한 객체로 반환
	# compile이 패턴 객체 p 반환
	p = re.compile('[a-z]+')	
    
    result = p.finditer("life is too short")
    print(result)
    # 문자열에서 [a-z]+에 부합하는 문자열을 반복가능한 객체로 반환
    >> <callable_iterator object at 0x01F5E390>
    
    # 반복문으로 확인해보면
    for r in result: print(r)
    
    >> <re.Match object; span=(0, 4), match='life'>
	>> <re.Match object; span=(5, 7), match='is'>
	>> <re.Match object; span=(8, 11), match='too'>
	>> <re.Match object; span=(12, 17), match='short'>
    
    # match객체를 요소로 가지는 반복가능 객체를 반환
    

match

  • match, search 메서드가 반환한 match객체
  • match객체가 가지는 메서드를 통해 인덱스와 문자열에 대한 정보를 확인할 수 있음
	p = re.compile('[a-z]+')	    
    m = p.match("python")	

를 전제로

  • group() : 매치된 문자열 반환
	m.group()
    >> 'python'
  • start() : 매치된 문자열의 시작 위치 반환
	m.start()
    >> 0
  • end() : 매치된 문자열의 끝 위치 반환
	m.end()
    >> 6
  • span() : 매치된 문자열의 (시작, 끝)에 해당하는 튜플 반환
	m.span()
    >> (0, 6)
  • match 메서드는 처음부터 비교하기 때문에 start가 항상 0
  • search 메서드로는 다르게 나올 수 있음
	p = re.compile('[a-z]+')	    
    m = p.search("3 python")	

를 전제로

  • group() : 매치된 문자열 반환
	m.group()
    >> 'python'
  • start() : 매치된 문자열의 시작 위치 반환
	m.start()
    >> 2
  • end() : 매치된 문자열의 끝 위치 반환
	m.end()
    >> 8
  • span() : 매치된 문자열의 (시작, 끝)에 해당하는 튜플 반환
	m.span()
    >> (2, 8)

이러하다

글 하나 정리하는 데에 생각보다 시간이 많이 드는 것 같다. 빠르게 집중해서 끝낼 수 있도록 이것도 연습이 필요할 듯..

0개의 댓글