알파벳으로 이루어진 문자열에서 패턴 매칭을 하다 보면 대소문자 구분하지 않고 매칭하고 싶을 때가 있다. 해당 정규 표현식으로는 (?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()
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 모듈 알아보기 (3) finditer 사용법과 findall과의 차이 (0) | 2022.10.01 |
---|---|
[정규 표현식] 역 참조(Back reference) 알아보기 (0) | 2022.10.01 |
[정규 표현식] re 모듈 알아보기 (2) 대체하기 (feat. re.sub) (0) | 2022.09.30 |
[정규 표현식] 메타 문자 알아보기 (6) | 2022.09.26 |
[정규 표현식] re 모듈 알아보기 (1) 패턴 찾기 (feat. re.match, re.search, re.findall) (0) | 2022.09.18 |
댓글