Maison  >  Article  >  développement back-end  >  Notes sur les expressions régulières chinoises Python

Notes sur les expressions régulières chinoises Python

高洛峰
高洛峰original
2017-01-12 15:41:511852parcourir

Du point de vue des chaînes, le chinois n'est pas aussi soigné et standardisé que l'anglais. C'est une réalité inévitable. Cet article combine des informations en ligne et une expérience personnelle, en prenant le langage python comme exemple pour faire un bref résumé. Bienvenue pour ajouter ou corriger des erreurs.
Un peu d'expérience
Vous pouvez utiliser la fonction repr() pour afficher le format original de la chaîne. Ceci est utile pour écrire des expressions régulières.
Le module re de Python a deux fonctions similaires : re.match(), re.search. Le processus de mise en correspondance des deux fonctions est exactement le même, mais le point de départ est différent. ne correspond qu'au début de la chaîne, et si elle échoue, elle abandonne ; tandis que la recherche persévérera et traversera complètement toutes les positions possibles dans la chaîne entière jusqu'à ce qu'elle trouve une correspondance, ou qu'elle échoue après avoir recherché la fin de la chaîne. Si vous comprenez les caractéristiques de match (c'est plus rapide dans certains cas), vous pouvez l'utiliser librement ; sinon, la recherche est généralement la fonction dont vous avez besoin ;
Trouvez toutes les correspondances possibles à partir d'une pile de texte et renvoyez-les sous forme de liste. Dans ce cas, utilisez la fonction findall(). Voir le code ci-dessous pour des exemples.
Sous utf8, chaque caractère chinois occupe 3 positions de caractère, et l'expression régulière est [x80-xff]{3} Vous le savez tous.
Sous Unicode, le format des caractères chinois est uXXXX Tant que vous trouvez la plage de jeux de caractères correspondante, vous pouvez faire correspondre la chaîne correspondante, ce qui facilite la sélection du texte dans une certaine langue dont vous avez besoin parmi plusieurs langues. textes. Cependant, pour une langue adhésive comme le japonais, qui comporte à la fois des caractères chinois et des hiragana et katakana, les résultats peuvent être biaisés.
Deux classes de caractères peuvent être utilisées côte à côte, par exemple, hiragana, katakana et chinois ensemble, u"[u4e00-u9fa5u3040-u309fu30a0-u30ff] " pour personnaliser le texte qui doit correspondre.
Lors de la correspondance avec le chinois, le format de l'expression régulière et la chaîne cible doivent être les mêmes. C’est crucial. Ou utilisez l'utf8 par défaut, et vous n'avez rien de plus à faire pour le moment ; s'il s'agit d'unicode, vous devez ajouter le format u"" avant l'expression régulière.
Vous pouvez définir une chaîne Unicode comme ceci : string=u"J'aime les expressions régulières". Si la chaîne n'est pas Unicode, vous pouvez utiliser la fonction unicode() pour la convertir. Si vous connaissez le codage de la chaîne source, vous pouvez utiliser newstr=unicode(oldstring, original_coding_name) pour convertir. Par exemple, unicode(string, "utf8") est couramment utilisé sous Linux et cp936 peut être utilisé sous Windows I. Je ne l'ai pas testé.
Exemple de programme

#!/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")

Le résultat de sortie est :

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: 
。 
。 
。?!、,;: 
- 
《》〈〉!¥%&*#

Pour plus d'articles liés aux notes d'expressions régulières chinoises Python, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn