Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 정규식(Regex)으로 문자열에서 "1(0+)1" 패턴 모두 찾기

이 튜토리얼에서는 정규식(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']

알고리즘

  1. re 모듈을 임포트합니다.
  2. 검색 대상이 되는 문자열을 초기화합니다.
  3. re.compile()을 사용해 원하는 패턴에 맞는 정규식 객체를 생성합니다. 이때 일반 문자열 대신 반드시 raw string(r"...")을 전달해야 역슬래시가 올바르게 처리됩니다.
  4. 생성한 정규식 객체의 findall() 메서드를 호출하여 문자열에서 패턴과 일치하는 모든 항목을 찾습니다.
  5. 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()만 활용하면 복잡한 문자열 처리 로직 없이도 원하는 패턴을 간단하고 효율적으로 추출할 수 있습니다. 정규식에 익숙해지면 텍스트 파싱, 데이터 클렌징, 로그 분석 등 다양한 작업에서 큰 도움이 됩니다.

튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨 주세요.