문제

Perl 및 기타 현재 Regex 엔진은 범주와 같은 유니 코드 특성을 REGEX에서 지원합니다. 예를 들어 Perl에서 사용할 수 있습니다 \p{Ll} 임의의 소문자 문자와 일치합니다 p{Zs} 공간 분리기의 경우. 나는 2.x 또는 3.x 라인의 파이썬 라인에서 이것에 대한 지원을 보지 못한다 (후회와 함께). 비슷한 효과를 얻는 좋은 전략을 알고 있습니까? 자산 솔루션을 환영합니다.

도움이 되었습니까?

해결책

당신은 시도 했습니까? 포니 구루 마,에 대한 파이썬 바인딩 Oniguruma 정규 표현 엔진? 그 엔진에서 당신은 단순히 말할 수 있습니다 \p{Armenian} 아르메니아 캐릭터와 일치합니다. \p{Ll} 또는 \p{Zs} 도 일 해요.

다른 팁

그만큼 성과선 모듈 (표준 대안 re 모듈)은 유니 코드 코드 포인트 속성을 지원합니다 \p{} 통사론.

각 캐릭터에서 유니 코드 데타를 힘들게 사용할 수 있습니다.

import unicodedata

def strip_accents(x):
    return u''.join(c for c in unicodedata.normalize('NFD', x) if unicodedata.category(c) != 'Mn')

잠시 전에 자산 솔루션에 대해 말하면서 나는 작은 것을 썼습니다. 프로그램 그렇게하려면 - 작성된 유니 코드 범주를 변환 \p{...} 유니 코드에서 추출 된 다양한 값으로 사양 (V.5.0.0). 카테고리 만 지원됩니다 (예 : 예 : L, Zs), BMP로 제한됩니다. 누군가가 유용하다고 생각할 경우를 대비하여 여기에 게시하고 있습니다 (Oniguruma가 실제로 더 나은 옵션 인 것 같습니다).

예제 사용 :

>>> from unicode_hack import regex
>>> pattern = regex(r'^\\p{Lu}(\\p{L}|\\p{N}|_)*')
>>> print pattern.match(u'疂_1+2').group(0)
疂_1
>>>

여기에 있습니다 원천. 또 한있다 JavaScript 버전, 동일한 데이터를 사용합니다.

당신은 유니 코드 속성 클래스가 Python Regex Parser에 의해 지원되지 않는다는 것입니다.

멋진 해킹을하고 싶다면 일반적으로 유용 할 것입니다. 그러한 클래스 토큰을 위해 문자열을 스캔하는 전처리 서를 만들 수 있습니다 (\p{M} 또는 무엇이든) 해당 문자 세트로 대체하여 예를 들어 \p{M} 될 것입니다 [\u0300–\u036F\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F], 그리고 \P{M} 될 것입니다 [^\u0300–\u036F\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F].

사람들은 당신에게 감사 할 것입니다. :)

그 동안에는 주목하십시오 \p{Ll} 파이썬 정규 표현식에는 동등한 것이 없으며 \p{Zs} 다음으로 덮여 있어야합니다 '(?u)\s'. 그만큼 (?u), 문서가 말한 것처럼, " w, w, b, b, d, d, s 및 s는 유니 코드 문자 속성 데이터베이스에 의존합니다." 그리고 \s 간격을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top