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

[정규 표현식] 알파벳 패턴 대소문자 상관없이 매칭하기 (feat. (?i), re.IGNORECASE)

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

알파벳으로 이루어진 문자열에서 패턴 매칭을 하다 보면 대소문자 구분하지 않고 매칭하고 싶을 때가 있다. 해당 정규 표현식으로는 (?i)가 있고 re 모듈에서 re.IGNORECASE를 이용하면 대소문자 구분 없이 패턴 매칭을 할 수 있다.

 

이번 포스팅에서는 대소문자 구분없이 패턴 매칭하는 방법을 알아보려고 한다.


   대소문자 상관없이 매칭하기

먼저 다음 예제를 살펴보자. 아래 코드는 'banana' 패턴이 매칭되는 문자열을 찾는다. 실행하면 대문자가 섞여있는 것은 패턴 매칭이 안된다.

 

import re

pattern = re.compile('banana')

string_list = ['banana', 'Banana', 'BANANA', 'baNana']

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')
    print()

 

 

이제 대소문자 구분 안 하고 매칭하는 방법을 알아보자.


1) 정규 표현식 : (?i)

정규 표현식 (?i)는 뒤에 나오는 패턴 문자열을 대소문자 구분하지 않고 매칭을 시도하겠다는 뜻이다. re.compile 첫 번째 인자에 (?i)banana를 입력하면 banana를 대소문자 구분 없이 매칭하겠다는 뜻이다.

 

pattern = re.compile('(?i)banana')

string_list = ['banana', 'Banana', 'BANANA', 'baNana']

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')
    print()

 

정규 표현식 (?i)


2) re 모듈 이용하기 : re.IGNORECASE

re.compile 두 번째 인자에 re.IGNORECASE(또는 re.I)를 넣어주면 정규 표현식 (?i)와 같은 방식으로 동작한다.

 

pattern = re.compile('banana', re.IGNORECASE) ## re.IGNORECASE 대신 re.I 써도 됨

string_list = ['banana', 'Banana', 'BANANA', 'baNana']

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')
    print()

 

re.IGNORECASE(또는 re.I)


댓글


맨 위로