본문 바로가기
프로그래밍/정규표현식

[정규 표현식] re 모듈 알아보기 (1) 패턴 찾기 (feat. re.match, re.search, re.findall)

by 부자 꽁냥이 2022. 9. 18.

re 모듈은 문자열에서 특정 패턴을 만족하는 문자열을 찾고 싶을 때 유용한 기능을 제공하는 모듈이다. 특히 re 모듈에서 제공하는 match, search, findall 함수는 패턴과 매칭되는 문자열을 찾는 대표적인 방법이다.

 

이번 포스팅에서는 re 모듈에서 문자열 패턴을 찾는 방법을 알아보고자 한다.


   re 모듈 - 패턴 찾기

1) 문자열 시작 부분만 살펴볼게~ : match

match는 주어진 패턴이 문자열 시작 부분과 매칭되면 re.Match 객체를 반환하고 매칭이 안되면 None, 즉 아무것도 반환하지 않는다. 아래 코드는 알파벳 소문자 한 개로 이루어진 문자를 찾는 과정이다. 이때 두 번째 문자열 'Hi how are you?'는 문자열 시작 부분이 대문자이므로 패턴 매칭이 안된다.

 

re.Match 객체는 group을 통하여 매칭되는 단어 또는 문자열을 출력하고 start는 매칭된 문자열 시작 위치를 나타낸다.

 

import re

pattern = re.compile('[a-z]') ## 찾을 패턴 = 소문자 알파벳 한개
string_list = ['hi how are you?', 'Hi how are you?']

for string in string_list:
    ## 해당 패턴이 문자열 시작부분에서 매칭되면 re.Match object 리턴, 매칭 안되면 None
    match_string = re.match(pattern, string)
    if match_string is not None: 
        print(match_string)
        print('매칭 문자열 :', match_string.group()) ## 매칭되는 문자열 출력
        print('매칭 인덱스 :', match_string.start()) ## 가장 처음 매칭되는 문자열 출력
    else:
        print('No Matched')

 

re.match


2) 문자열 어디든 살펴볼게~ 대신 한번만 찾아줌! : search

match는 문자열 시작 부분에서 패턴 매칭을 시도하지만 search는 문자열 어디든 패턴 매칭을 실시한다. 다만 매칭되는 모든 단어(또는 문자열)를 찾는 것이 아니라 한 번 매칭되면 종료된다. search도 match와 마찬가지로 매칭되는 패턴을 찾으면 re.Match 객체를 반환하고 아닌 경우 아무것도 반환하지 않는다.

 

앞의 경우와 다르게 search 함수는 두 번째 문자열 'Hi how are you?'에서 'H'는 매칭이 안되지만 바로 뒤에 'i'와 매칭되므로 re.Match 객체를 반환한다.

 

for string in string_list:
    ## 해당 패턴이 문자열 어디든 하나라도 매칭되면 re.Match object 리턴, 매칭 안되면 None
    match_string = re.search(pattern, string)
    if match_string is not None: 
        print(match_string)
        print('매칭 문자열 :', match_string.group()) ## 매칭되는 문자열 출력
        print('매칭 인덱스 :', match_string.start()) ## 가장 처음 매칭되는 문자열 출력
    else:
        print('No Matched')

 

re.search


3) 매칭되는 모든 것을 너에게 줄게!! : findall

findall은 매칭되는 모든 단어 또는 문자열을 리스트에 담아서 반환한다. 이게 좋은 것 같지만 문자열이 길 경우 시간이 많이 걸린다는 단점이 있다.

 

pattern = re.compile('[a-z]') ## 찾을 패턴 소문자 알파벳 한개
string_list = ['hi how are you?', '???##%']

for string in string_list:
    ## 해당 패턴이 문자열 매칭되는 모든 문자열을 리스트에 담는다
    match_string_list = re.findall(pattern, string)
    if len(match_string_list) > 0: ##  
        print('매칭 문자열 리스트 :', match_string) ## 매칭되는 문자열 출력
    else:
        print('No Matched')

 

re.findall


댓글


맨 위로