이 튜토리얼에서는 정규식(regex)을 사용하여 문자열 안에 있는 "1(0+)1" 패턴의 모든 등장 위치를 찾는 프로그램을 작성해 보겠습니다. Python에는 정규식을 손쉽게 다룰 수 있도록 도와주는 re 모듈이 기본으로 내장되어 있어, 별도의 설치 없이 바로 사용할 수 있습니다.
먼저 아래 예시를 통해 어떤 동작을 구현할지 살펴보겠습니다.
입력: string = "Sample 1(0+)1 string with 1(0+)1 unnecessary patterns 1(0+)1" 출력: 패턴 매칭 총 개수는 3개입니다. ['1(0+)1', '1(0+)1', '1(0+)1']
알고리즘
re모듈을 임포트합니다.- 검색 대상이 되는 문자열을 초기화합니다.
re.compile()을 사용해 원하는 패턴에 맞는 정규식 객체를 생성합니다. 이때 일반 문자열 대신 반드시 raw string(r"...")을 전달해야 역슬래시가 올바르게 처리됩니다.- 생성한 정규식 객체의
findall()메서드를 호출하여 문자열에서 패턴과 일치하는 모든 항목을 찾습니다. findall()은 매칭된 문자열들을 담은 리스트를 반환하므로, 이를 출력하여 확인합니다.
코드 예제
# re 모듈 임포트
import re
# 검색할 문자열 초기화
string = "Sample 1(0+)1 string with 1(0+)1 unnecessary patterns 1(0+)1"
# 패턴에 대한 정규식 객체 생성
regex = re.compile(r"\d\(\d\+\)\d") # 이 정규식은 1(0+)1 형태의 모든 패턴을 찾습니다
# regex.findall() 메서드로 매칭된 모든 패턴을 저장
result = regex.findall(string) # result는 매칭된 문자열들의 리스트입니다
# 패턴 매칭 개수 출력
print(f"패턴 매칭 총 개수는 {len(result)}개입니다")
print()
# 매칭된 패턴 목록 출력
print(result)정규식 패턴 해설
\d: 숫자 한 자리(0~9)와 일치합니다.\(,\): 괄호 문자 자체와 일치합니다. 정규식에서 괄호는 그룹핑에 쓰이는 특수 문자이므로 역슬래시로 이스케이프해야 합니다.\+: 더하기 기호(+) 자체와 일치합니다. + 역시 반복을 의미하는 특수 문자이므로 이스케이프가 필요합니다.
실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.
패턴 매칭 총 개수는 3개입니다 ['1(0+)1', '1(0+)1', '1(0+)1']
마무리
이처럼 re.compile()과 findall()만 활용하면 복잡한 문자열 처리 로직 없이도 원하는 패턴을 간단하고 효율적으로 추출할 수 있습니다. 정규식에 익숙해지면 텍스트 파싱, 데이터 클렌징, 로그 분석 등 다양한 작업에서 큰 도움이 됩니다.
튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨 주세요.