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

Python 정규식에서 중첩 문자 클래스 빼기(차집합)가 작동하는 방식

중첩 문자 클래스 빼기란 무엇인가?

정규 표현식에서 빼기(subtraction) 연산에 사용되는 문자 클래스 안에는 완전한 문자 클래스 문법을 그대로 사용할 수 있습니다. 이 덕분에 빼지는 클래스 안에서 또 다른 클래스를 빼는 '중첩' 연산이 가능해집니다.

예를 들어 [0-9-[0-7-[0-3]]] 패턴을 살펴보겠습니다. 이 표현식은 먼저 0-7 범위에서 0-3을 뺀 결과인 [4-7]을 만들고, 다시 0-9 범위에서 그 결과를 뺍니다. 최종적으로 [0-9-[4-7]], 즉 [0-38-9]와 동일해지며, 따라서 이 패턴은 012389 문자열에 포함된 임의의 한 문자와 일치하게 됩니다.

빼기 연산은 반드시 마지막 요소여야 합니다

문자 클래스 내에서 빼기 연산은 항상 마지막 요소로 위치해야 한다는 중요한 규칙이 있습니다.

예를 들어 [0-9-[4-7]a-d]는 유효한 정규 표현식이 아닙니다. 올바르게 작성하려면 [0-9a-d-[4-7]]처럼 빼기 부분을 맨 뒤로 옮겨야 합니다. 빼기 연산은 앞에 나열된 클래스 전체에 대해 적용된다는 점도 기억하세요.

두 개의 클래스를 연속해서 뺄 수는 없습니다

중첩된 문자 클래스 빼기는 가능하지만, 하나의 클래스에서 두 개의 클래스를 차례로 연달아 빼는 것은 허용되지 않습니다.

예를 들어, 모든 유니코드 글자(\p{L})로 구성된 클래스에서 ASCII 문자와 아랍어 문자를 동시에 제외하고 싶다면, 두 문자 집합을 하나의 클래스로 먼저 합친 뒤 그 전체를 빼야 합니다.

[\p{L}-[\p{IsBasicLatin}\p{IsArabic}]]

이렇게 작성하면 기본 라틴 문자(ASCII)와 아랍어 문자를 제외한 모든 유니코드 글자와 일치하는 패턴이 됩니다.