>  기사  >  백엔드 개발  >  Python 중국어 정규식 참고사항

Python 중국어 정규식 참고사항

高洛峰
高洛峰원래의
2017-01-12 15:41:511806검색

문자열의 관점에서 볼 때 중국어는 영어만큼 깔끔하고 표준화되어 있지 않습니다. 이는 피할 수 없는 현실입니다. 이 기사는 온라인 정보와 개인적인 경험을 결합하여 Python 언어를 예로 들어 간략하게 요약합니다. 실수를 추가하거나 수정하는 것을 환영합니다.
약간의 경험
repr() 함수를 사용하면 문자열의 원래 형식을 볼 수 있습니다. 이는 정규식을 작성하는 데 도움이 됩니다.
Python의 re 모듈에는 re.match(), re.search라는 두 가지 유사한 기능이 있습니다. 두 함수의 일치 과정은 완전히 동일하지만 시작점이 다릅니다. 일치는 문자열의 시작 부분에서만 일치하며, 실패하면 포기합니다. 반면 검색은 일치하는 항목을 성공적으로 찾을 때까지 전체 문자열에서 가능한 모든 위치를 탐색하고 완전히 탐색합니다. 그렇지 않으면 문자열 끝을 검색한 후 실패합니다. 일치의 특성을 이해하면(어떤 경우에는 더 빠름) 자유롭게 사용할 수 있습니다. 그렇지 않은 경우 일반적으로 검색이 필요한 기능입니다.
텍스트 더미에서 가능한 모든 일치 항목을 찾아 목록 형식으로 반환합니다. 이 경우 findall() 함수를 사용하세요. 예제는 아래 코드를 참조하세요.
utf8에서는 각 한자가 3자리를 차지하고 정규식은 [x80-xff]{3}라는 사실은 다들 알고 계실 겁니다.
유니코드에서 한자의 형식은 uXXXX입니다. 해당 문자 집합의 범위를 찾으면 해당 문자열을 일치시킬 수 있으므로 다중에서 필요한 특정 언어의 텍스트를 쉽게 선택할 수 있습니다. 언어 텍스트. 그러나 일본어처럼 한자와 히라가나, 가타카나를 모두 사용하는 접착성 언어의 경우 결과가 편향될 수 있습니다.
두 문자 클래스를 나란히 사용할 수 있습니다(예: 히라가나, 가타카나 및 중국어). u"[u4e00-u9fa5u3040-u309fu30a0-u30ff]+"를 사용하여 일치해야 하는 텍스트를 사용자 정의할 수 있습니다.
중국어 매칭 시 정규식과 대상 문자열의 형식이 동일해야 합니다. 이것은 매우 중요합니다. 또는 기본 utf8을 사용하면 지금은 추가 작업을 수행할 필요가 없습니다. 유니코드인 경우 정규식 앞에 u"" 형식을 추가해야 합니다.
다음과 같이 유니코드 문자열을 정의할 수 있습니다: string=u"I love 정규 표현식". 문자열이 유니코드가 아닌 경우 unicode() 함수를 사용하여 변환할 수 있습니다. 소스 문자열의 인코딩을 알고 있으면 newstr=unicode(oldstring, original_coding_name)을 사용하여 변환할 수 있습니다. 예를 들어 unicode(string, "utf8")는 Linux에서 일반적으로 사용되며 Windows에서는 cp936을 사용할 수 있습니다. 그것을 테스트하지 않았습니다.
예제 프로그램

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
# 
#author: rex 
#blog: http://iregex.org 
#filename py_utf8_unicode.py 
#created: 2010-06-27 09:11 
import re 
def findPart(regex, text, name): 
res=re.findall(regex, text) 
if res: 
print "There are %d %s parts:\n"% (len(res), name) 
for r in res: 
print "\t",r 
print 
#sample is utf8 by default. 
sample='''en: Regular expression is a powerful tool for manipulating text. 
zh: 正则表达式是一种很有用的处理文本的工具。 
jp: 正規表現は非常に役に立つツールテキストを操作することです。 
jp-char: あアいイうウえエおオ 
kr:정규 표현식은 매우 유용한 도구 텍스트를 조작하는 것입니다. 
puc: 。?!、,;:“ ”‘ '——……·-·《》〈〉!¥%&*# 
''' 
#let's look its raw representation under the hood: 
print "the raw utf8 string is:\n", repr(sample) 
print 
#find the non-ascii chars: 
findPart(r"[\x80-\xff]+",sample,"non-ascii") 
#convert the utf8 to unicode 
usample=unicode(sample,'utf8') 
#let's look its raw representation under the hood: 
print "the raw unicode string is:\n", repr(usample) 
print 
#get each language parts: 
findPart(u"[\u4e00-\u9fa5]+", usample, "unicode chinese") 
findPart(u"[\uac00-\ud7ff]+", usample, "unicode korean") 
findPart(u"[\u30a0-\u30ff]+", usample, "unicode japanese katakana") 
findPart(u"[\u3040-\u309f]+", usample, "unicode japanese hiragana") 
findPart(u"[\u3000-\u303f\ufb00-\ufffd]+", usample, "unicode cjk Punctuation")

출력 결과는 다음과 같습니다.

the raw utf8 string is: 
'en: Regular expression is a powerful tool for manipulating text.\nzh: \xe6\xad\xa3\xe5\x88\x99\xe8\xa1\xa8\xe8\xbe\xbe\xe5\xbc\x8f\xe6\x98\xaf\xe4\xb8\x80\xe7\xa7\x8d\xe5\xbe\x88\xe6\x9c\x89\xe7\x94\xa8\xe7\x9a\x84\xe5\xa4\x84\xe7\x90\x86\xe6\x96\x87\xe6\x9c\xac\xe7\x9a\x84\xe5\xb7\xa5\xe5\x85\xb7\xe3\x80\x82\njp: \xe6\xad\xa3\xe8\xa6\x8f\xe8\xa1\xa8\xe7\x8f\xbe\xe3\x81\xaf\xe9\x9d\x9e\xe5\xb8\xb8\xe3\x81\xab\xe5\xbd\xb9\xe3\x81\xab\xe7\xab\x8b\xe3\x81\xa4\xe3\x83\x84\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x86\xe3\x82\xad\xe3\x82\xb9\xe3\x83\x88\xe3\x82\x92\xe6\x93\x8d\xe4\xbd\x9c\xe3\x81\x99\xe3\x82\x8b\xe3\x81\x93\xe3\x81\xa8\xe3\x81\xa7\xe3\x81\x99\xe3\x80\x82\njp-char: \xe3\x81\x82\xe3\x82\xa2\xe3\x81\x84\xe3\x82\xa4\xe3\x81\x86\xe3\x82\xa6\xe3\x81\x88\xe3\x82\xa8\xe3\x81\x8a\xe3\x82\xaa\nkr:\xec\xa0\x95\xea\xb7\x9c \xed\x91\x9c\xed\x98\x84\xec\x8b\x9d\xec\x9d\x80 \xeb\xa7\xa4\xec\x9a\xb0 \xec\x9c\xa0\xec\x9a\xa9\xed\x95\x9c \xeb\x8f\x84\xea\xb5\xac \xed\x85\x8d\xec\x8a\xa4\xed\x8a\xb8\xeb\xa5\xbc \xec\xa1\xb0\xec\x9e\x91\xed\x95\x98\xeb\x8a\x94 \xea\xb2\x83\xec\x9e\x85\xeb\x8b\x88\xeb\x8b\xa4.\npuc: \xe3\x80\x82\xef\xbc\x9f\xef\xbc\x81\xe3\x80\x81\xef\xbc\x8c\xef\xbc\x9b\xef\xbc\x9a\xe2\x80\x9c \xe2\x80\x9d\xe2\x80\x98 \xe2\x80\x99\xe2\x80\x94\xe2\x80\x94\xe2\x80\xa6\xe2\x80\xa6\xc2\xb7\xef\xbc\x8d\xc2\xb7\xe3\x80\x8a\xe3\x80\x8b\xe3\x80\x88\xe3\x80\x89\xef\xbc\x81\xef\xbf\xa5\xef\xbc\x85\xef\xbc\x86\xef\xbc\x8a\xef\xbc\x83\n' 
There are 14 non-ascii parts: 
正则表达式是一种很有用的处理文本的工具。 
正規表現は非常に役に立つツールテキストを操作することです。 
あアいイうウえエおオ 
정규 
표현식은 
매우 
유용한 
도구 
텍스트를 
조작하는 
것입니다 
。?!、,;:“ 
”‘ 
'——……·-·《》〈〉!¥%&*# 
the raw unicode string is: 
u'en: Regular expression is a powerful tool for manipulating text.\nzh: \u6b63\u5219\u8868\u8fbe\u5f0f\u662f\u4e00\u79cd\u5f88\u6709\u7528\u7684\u5904\u7406\u6587\u672c\u7684\u5de5\u5177\u3002\njp: \u6b63\u898f\u8868\u73fe\u306f\u975e\u5e38\u306b\u5f79\u306b\u7acb\u3064\u30c4\u30fc\u30eb\u30c6\u30ad\u30b9\u30c8\u3092\u64cd\u4f5c\u3059\u308b\u3053\u3068\u3067\u3059\u3002\njp-char: \u3042\u30a2\u3044\u30a4\u3046\u30a6\u3048\u30a8\u304a\u30aa\nkr:\uc815\uaddc \ud45c\ud604\uc2dd\uc740 \ub9e4\uc6b0 \uc720\uc6a9\ud55c \ub3c4\uad6c \ud14d\uc2a4\ud2b8\ub97c \uc870\uc791\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.\npuc: \u3002\uff1f\uff01\u3001\uff0c\uff1b\uff1a\u201c \u201d\u2018 \u2019\u2014\u2014\u2026\u2026\xb7\uff0d\xb7\u300a\u300b\u3008\u3009\uff01\uffe5\uff05\uff06\uff0a\uff03\n' 
There are 6 unicode chinese parts: 
正则表达式是一种很有用的处理文本的工具 
正規表現 
非常 
役 
立 
操作 
There are 8 unicode korean parts: 
정규 
표현식은 
매우 
유용한 
도구 
텍스트를 
조작하는 
것입니다 
There are 6 unicode japanese katakana parts: 
ツールテキスト 
ア 
イ 
ウ 
エ 
オ 
There are 11 unicode japanese hiragana parts: 
は 
に 
に 
つ 
を 
することです 
あ 
い 
う 
え 
お 
There are 5 unicode cjk Punctuation parts: 
。 
。 
。?!、,;: 
- 
《》〈〉!¥%&*#

Python 중국어 정규식 노트와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.