본문 바로가기
Language/Python

[python] 정규표현식과 Re모듈함수(match/search/findall/fullmatch)

by 카프리썬 2021. 7. 5.
728x90

 

정규표현식(Regular Expression)

  • 정규표현식을 지원하기 위해 표준모듈 re 사용
  • 원하는 문자열 패턴을 정의하여, 소스문자열과의 일치여부 판단

정규표현식을 왜 쓰는걸까?

파이썬 문자열에서 기본적으로 in,find(),index() 같은 함수로 문자열이 존재하는지, 어느위치에 있는지 알려준다.

하지만 문자열안에 정수만 추출하고 싶다면 문자열에서 제공하는 함수만으로 한계가 있다. 이때 정규표현식 사용 

 

re모듈 함수

match(패턴,문자열) : 문자열의 처음부터 시작해서 작성한 패턴이 일치하는지 확인 

import re
print(re.match('a','ab')) #<re.Match object; span=(0, 1), match='a'>
print(re.match('a','ba')) #None

search(패턴,문자열) : 문자열 안에 작성한 패턴이 일치하는지 확인,

패턴이 문자열의 처음부터 일치하지 않아도 댐 (match()차이)

import re
print(re.search('a','ab')) #<re.Match object; span=(0, 1), match='a'>
print(re.search('a','ba')) #<re.Match object; span=(1, 2), match='a'>

findall(패턴,문자열) : 문자열 안에 패턴에 맞는 케이스 전부를 리스트로 반환

print(re.findall('a','aba')) #[a,a]
print(re.findall('ba','baaba')) #[ba,ba]

finditer(패턴,문자열) : 문자열 안에 패턴에 맞는 케이스 전부를 iterator 형식으로 반환 

re_iter = re.finditer('ba','baaba')
for s in re_iter:
    print(s)
    #<re.Match object; span=(0, 2), match='ba'>
    #<re.Match object; span=(3, 5), match='ba'>

fullmatch(패턴,문자열) : 문자열에 시작과 끝의 패턴이 정확하게 일치할때 반환 

print(re.fullmatch('a','aa')) #None
print(re.fullmatch('a','ab')) #None
print(re.fullmatch('aa','aa')) #<re.Match object; span=(0, 2), match='aa'>

split(패턴,문자열,최대split수) : 패턴이 맞으면 이 기점으로 리스트를 쪼개하는 함수

print(re.split('a','abaabca')) #['', 'b', '', 'bc', '']
print(re.split('a','abaabca',2)) #['', 'b', 'abca']
print(re.split('a','abaabca',3)) #['', 'b', 'bca']
print(re.split('a','abaabca',4)) #['', 'b', 'bc','']

sub(패턴,교체할문자열,문자열,최대교체수) : 패턴에 맞으면 그 문자를 교체할문자열로 교체는 함수

print(re.sub('a','z','ab')) #zb
print(re.sub('a','z','aaab')) #zzzb
print(re.sub('a','z','aaab',1)) #zaab

subn(패턴,교체할문자열,문자열,최대교체수) : 패턴에 맞으면 그 문자를 교체할문자열로 교체는 함수

-> (문자열,매칭횟수) 리턴

print(re.subn('a','z','ab')) #('zb',1)
print(re.subn('a','z','aaab')) #('zzzb',3)
print(re.subn('a','z','aaab',1)) #('zaab',1)

 

compile : 동일한 정규식을 여러번 사용할경우 패턴을 지정 

이후 함수에서는 매개변수로 검색할 전체 '문자열'만 넣으면 댐! 

import re
c=re.compile('a')
print(c.match('ab'))
print(c.search('abab'))
print(c.findall('baaba'))

 

compile패턴

 

 

예시 : ^패턴과 match을 사용해서 문자열의 접두사인지 확인할 수 있다.

import re #정규식 이용
def solution(phone_book):
    for phone_number in phone_book:
        #complie패턴^ : 이 패턴으로 시작해야함
        tmp = re.compile("^"+phone_number)
        print(tmp)
        for phone_number2 in phone_book:
            if tmp.match(phone_number2) and phone_number!=phone_number2:
                return False
    return True

 

 

https://namhandong.tistory.com/65

 

파이썬 | 정규표현식(re) re.compile 사용을 위한 표현법

1. 정규 표현식 (RE : Regular Expression) 정규 표현식은 특정한 규칙을 가진 문자열 패턴을 사용하는 방식이다. 데이터 전처리에 있어서 텍스트에서 특정 문자열을 검색, 치환, 제거할 때 사용한다. 예

namhandong.tistory.com

 

 

 

출처 

https://brownbears.tistory.com/506

 

[Python] re 모듈 사용법

regex는 정규 표현식으로 흔히 알려져 있습니다. 파이썬에서 정규 표현식을 사용할 때, 내장 모듈인 re를 사용하고 있습니다. re 모듈에서 제공해주는 함수들을 보면 match(), fullmatch(), findall(), search(

brownbears.tistory.com

https://wikidocs.net/4308#_5

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

반응형