Python 정규식 특수 문자 '.', '?', '*'의 차이점
Python의 re 모듈에서 자주 사용되는 세 가지 특수 문자인 점(.), 물음표(?), 별표(*)는 각각 서로 다른 역할을 수행합니다. 이 글에서는 각 특수 문자의 의미와 동작 방식을 예제와 함께 살펴보겠습니다.
1. 점(.): 임의의 한 문자와 매칭
점(.)은 줄바꿈 문자를 제외한 모든 문자와 일치하는 특수 문자입니다. 기본 모드에서는 개행 문자(\n)와는 매칭되지 않지만, DOTALL 플래그가 지정되면 줄바꿈 문자를 포함한 모든 문자와 매칭됩니다.
예를 들어 패턴 a.c는 'abc', 'a1c', 'a c'처럼 a와 c 사이에 어떤 문자가 와도 일치합니다.
2. 물음표(?): 0회 또는 1회 등장
물음표(?)는 바로 앞의 정규식 요소가 0번 또는 1번 나타나도록 만드는 수량자(quantifier)입니다. 즉, 해당 요소를 선택 사항(optional)으로 만들어 줍니다.
예를 들어 패턴 ab?는 'a' 또는 'ab'와 일치합니다. 물음표가 b에 적용되기 때문에 b가 없어도 매칭에 성공합니다.
3. 별표(*): 0회 이상 반복
별표(*)는 바로 앞의 정규식 요소가 0번 이상, 가능한 한 많이 반복되도록 만듭니다. 별표는 기본적으로 탐욕적(greedy)으로 동작하여 매칭할 수 있는 최대한 많은 문자를 소비하려고 시도합니다.
예를 들어 패턴 ab*는 'a', 'ab', 'abbb'처럼 a 뒤에 b가 몇 개든(없어도) 일치합니다.
세 특수 문자 비교 요약
| 특수 문자 | 역할 | 매칭 예시 |
|---|---|---|
| . | 임의의 한 문자 매칭 (기본적으로 줄바꿈 제외) | a.c → abc, a1c |
| ? | 앞 요소가 0회 또는 1회 등장 (선택 사항) | ab? → a, ab |
| * | 앞 요소가 0회 이상 반복 | ab* → a, ab, abbb |
정리하면, 점(.)은 '무엇이 오든 상관없는 한 글자'를 의미하고, 물음표(?)와 별표(*)는 앞 요소의 반복 횟수를 제어하는 수량자입니다. 물음표는 최대 1회까지만 허용하고, 별표는 무제한 반복을 허용한다는 점이 핵심 차이입니다.