정규식에서 별표(*) 메타 문자는 바로 왼쪽에 있는 패턴이 0번 이상 반복되는 경우를 의미합니다. 즉, 해당 패턴이 전혀 나타나지 않아도 매칭에 성공하며, 여러 번 반복되는 경우에도 모두 매칭됩니다.
예제 코드
다음 코드는 문자열 'chihua huahua'에서 패턴 '\w'(영문자, 숫자, 밑줄)가 0개 이상 나타나는 부분을 모두 찾아 출력합니다.
import re s = 'chihua huahua' result = re.findall(r'\w*', s) print(result)
실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻습니다.
['chihua', '', 'huahua', '']
결과 해석
re.findall() 함수는 정규식과 일치하는 모든 부분 문자열을 리스트 형태로 반환합니다. 실행 결과를 보면 'chihua'와 'huahua'라는 두 단어가 매칭되었으며, 그 사이와 문자열 끝에는 빈 문자열('')도 함께 포함되어 있습니다.
이러한 결과가 나오는 이유는 '*' 메타 문자가 0번 이상의 반복을 허용하기 때문입니다. 공백 문자가 있는 위치에서는 '\w' 패턴이 한 번도 나타나지 않았지만(즉, 0회 반복), 그 자체로 매칭에 성공하여 빈 문자열이 결과 목록에 추가된 것입니다.
참고로, 만약 최소 한 번 이상의 반복만 매칭하고 싶다면 '*' 대신 '+' 메타 문자를 사용하면 됩니다. '+'는 해당 패턴이 적어도 한 번은 나타나야 매칭에 성공하므로, 위 예제에서는 ['chihua', 'huahua']만 반환됩니다.