2012-09-02 6 views
1

다음 줄을 작성한 프로그래머는 아마도 regex이라는 파이썬 패키지를 사용합니다. 어떤 사람은 무엇 A='\p{Word_Break=ALetter}'-+ 방법을 설명파이썬 정규식 컴파일

UNIT = regex.compile("(?:{A}(?:'{A})?)++|-+|\S".format(A='\p{Word_Break=ALetter}')) 

을 도와 드릴까요?

+0

나는'pypi' 태그를 제거했습니다. 모듈은 pypi를 통해 배포 될 수 있지만이 문제는'pypi' 자체에 관한 것이 아닙니다. –

답변

3

\p{property=value} 연산자는 유니 코드 코드 포인트의 속성에 일치하고 연결된 패키지 인덱스 페이지에 설명되어 있습니다 :

  • 스크립트와 블록

    \p{property=value}; \P{property=value}; \p{value} ; \P{value} 
    
포함

유니 코드 코드 포인트의 특성,

이 항목은 어떤 유니 코드 문자와도 일치합니다 depoint의 값은 ALetterWord_Break property입니다. 현재 유니 코드 코드 포인트 데이터베이스에는 24941 개의 일치 항목이 있습니다 (자세한 내용은 Unicode Text Segmentation, Word Boundaries chapter specifiation 참조).

예제는 표준 파이썬 string formatting을 사용하여 부분 표현식을 컴파일 할 정규 표현식으로 보간합니다. "{A}"부분은 .format(A='...') 부분을 채울 수있는 자리 표시 자일뿐입니다. 최종 결과는 다음과 같습니다

"(?:\p{Word_Break=ALetter}(?:'\p{Word_Break=ALetter})?)++|-+|\S" 

-+ 순서가 방금 파이썬 re 모듈 식처럼, 하나 또는 그 이상의 - 대시 일치

, 정말 아무것도 특별하지 않다.

지금은 ++보다이 더 흥미 롭습니다. 그것은 possessive quantifier이고 정규 표현식 정규 표현식이 패턴의 모든 가능한 순열을 시도하지 못하게합니다. 이는 성능 최적화로서 catastrophic backtracking 문제를 방지합니다.

+0

Word_Break 속성은 쉼표, 선포와 같은 것입니까? 링크 된 페이지를 완전히 이해하지 못합니다. – juju

+0

@juju :'Word_Break'는 코드 포인트를 단어와 물건을 구성하는 항목으로 분류하여 텍스트를 처리하는 소프트웨어가 단어를 시작하고 끝내는 스크립트를 결정할 수 있도록합니다. 'ALetter'는 대부분 알파벳 문자들입니다. –

+0

링크 된 페이지가 'Word_Break'에서 다루는 다양한 언어를 소개합니까? 영어로 모범을 보겠습니까? – juju