유니 코드 속성과 일치하는 Python 정규식
Perl 및 일부 기타 현재 정규식 엔진은 정규식에서 범주와 같은 유니 코드 속성을 지원합니다. 예를 들어 Perl \p{Ll}
에서는 임의의 소문자 또는 p{Zs}
공백 구분 기호 를 일치시키는 데 사용할 수 있습니다 . 나는 파이썬 2.x 또는 3.x 라인에서 이것에 대한 지원을 보지 못합니다 (정말 후회합니다). 비슷한 효과를 얻을 수있는 좋은 전략을 알고있는 사람이 있습니까? 자체 개발 솔루션을 환영합니다.
당신은 시도 Ponyguruma 의 바인딩 파이썬 Oniguruma 정규 표현식 엔진을? 이 엔진에서는 \p{Armenian}
아르메니아 문자와 일치하도록 간단히 말할 수 있습니다 . \p{Ll}
또는 \p{Zs}
일도.
정규식 모듈 (표준의 대안 re
모듈)는 유니 코드 코드 포인트 특성 지원 \p{}
구.
각 문자에서 unicodedata를 열심히 사용할 수 있습니다.
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
>>>
여기에 소스가 있습니다. 동일한 데이터를 사용 하는 자바 스크립트 버전 도 있습니다 .
파이썬 정규식 파서가 유니 코드 속성 클래스를 지원하지 않는다는 것이 맞습니다.
당신이 좋은 해킹을하고 싶었다면, 그건 당신이 (예 : 클래스 토큰 문자열을 검색하여 처리기를 만들 수 있습니다, 일반적으로 유용 할 것이다 \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 \ B \ B \ D \ D \ S 및 \ S 유니 코드 문자 속성 데이터베이스에 의존한다." 그리고 \s
어떤 간격 문자를 의미한다.
참조 URL : https://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties
'programing' 카테고리의 다른 글
JavaScript Object Literal에 프로토 타입 추가 (0) | 2021.01.14 |
---|---|
Eclipse 3.5에서 편집기 탭 너비 변경 (0) | 2021.01.14 |
WPF 4.0에서 SnapsToDevicePixels를 언제 사용해야합니까? (0) | 2021.01.14 |
내부 HTML 태그 (0) | 2021.01.14 |
OSGi는 무엇이며 그 사용의 몇 가지 예는 무엇입니까? (0) | 2021.01.14 |