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

Python 정규 표현식에서 반복 패턴 뒤에 오는 문자를 매칭에서 제외하는 방법

Python 정규 표현식(Regex)에서 특정 문자가 반복된 직후에 나타나는 문자를 매칭 대상에서 제외하려면 부정형 전방 탐색(Negative Lookahead)을 사용하면 됩니다. 부정형 전방 탐색은 (?!패턴) 형태로 작성하며, 괄호 안의 패턴이 뒤따르지 않을 때만 매칭이 성공합니다.

예를 들어, 문자열이 '2'가 한 번 또는 두 번 연속으로 등장한 뒤 '5'로 이어지는 경우를 제외한 모든 문자열과 일치시키려면 다음과 같은 패턴을 사용할 수 있습니다.

정규식 패턴 구성

^문자열의 시작 지점을 의미합니다.
(?!부정형 전방 탐색의 시작으로, 이 조건이 성립하면 매칭하지 않습니다.
2{1,2}5)'2'가 1회 또는 2회 반복된 뒤 '5'가 오는 경우를 배제합니다.
.*그 외의 모든 문자열은 그대로 허용합니다.

즉, 전체 패턴 r'^(?!2{1,2}5).*'는 "문자열 시작 부분에 '2'가 한두 번 반복된 후 '5'가 오지 않는 경우에만 나머지 전체를 매칭한다"는 의미입니다.

예제 코드

다음 코드는 앞서 설명한 조건을 그대로 구현한 것입니다.

import re

foo = '2249678'
foo2 = '2259678'

result = re.findall(r'^(?!2{1,2}5).*', foo)
result2 = re.findall(r'^(?!2{1,2}5).*', foo2)

print(result)
print(result2)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

['2249678']
[]

결과 해석

'2249678'은 '2'가 두 번 반복된 뒤 '4'가 오므로 배제 조건('25' 또는 '225')에 해당하지 않아 정상적으로 매칭됩니다. 반면 '2259678'은 '2'가 두 번 반복된 직후 '5'가 오므로 부정형 전방 탐색 조건에 걸려 매칭되지 않고 빈 리스트가 반환됩니다.