主頁 > 知識庫 > Python 中文正則表達(dá)式筆記

Python 中文正則表達(dá)式筆記

熱門標(biāo)簽:浙江營銷外呼系統(tǒng)有哪些 淄博市張店區(qū)地圖標(biāo)注 地圖標(biāo)注店鋪地圖標(biāo)注酒店 遼寧秒客來電話機器人 自己做的電銷機器人 惠安地圖標(biāo)注 山東外呼系統(tǒng)聯(lián)系方式 上海銷售電銷機器人軟件 哈爾濱公司外呼系統(tǒng)代理

從字符串的角度來說,中文不如英文整齊、規(guī)范,這是不可避免的現(xiàn)實。本文結(jié)合網(wǎng)上資料以及個人經(jīng)驗,以 python 語言為例,稍作總結(jié)。歡迎補充或挑錯。
一點經(jīng)驗
可以使用 repr()函數(shù)查看字串的原始格式。這對于寫正則表達(dá)式有所幫助。
Python 的 re模塊有兩個相似的函數(shù):re.match(), re.search 。兩個函數(shù)的匹配過程完全一致,只是起點不同。match只從字串的開始位置進行匹配,如果失敗,它就此放棄;而search則會鍥而不舍地完全遍歷整個字串中所有可能的位置,直到成功地找到一個匹配,或者搜索完字串,以失敗告終。如果你了解match的特性(在某些情況下比較快),大可以自由用它;如果不太清楚,search通常是你需要的那個函數(shù)。
從一堆文本中,找出所有可能的匹配,以列表的形式返回,這種情況用findall()這個函數(shù)。例子見后面的代碼。
utf8下,每個漢字占據(jù)3個字符位置,正則式為[\x80-\xff]{3},這個都知道了吧。
unicode下,漢字的格式如\uXXXX,只要找到對應(yīng)的字符集的范圍,就能匹配相應(yīng)的字串,方便從多語言文本中挑出所需要的某種語言的文本。不過,對于像日文這樣的粘著語,既有中文字符,又有平假名片假名,或許結(jié)果會有所偏差。
兩種字符類可以并列在一起使用,例如,平假名、片假名、中文的放在一起,u"[\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff]+",來自定義所需要匹配的文本。
匹配中文時,正則表達(dá)式和目標(biāo)字串的格式必須相同。這一點至關(guān)重要?;蛘叨加媚J(rèn)的utf8,此時你不用額外做什么;如果是unicode,就需要在正則式之前加上u""格式。
可以這樣定義unicode字符串:string=u"我愛正則表達(dá)式"。如果字串不是unicode的,可以使用unicode()函數(shù)轉(zhuǎn)換之。如果你知道源字串的編碼,可以使用newstr=unicode(oldstring, original_coding_name)的方式轉(zhuǎn)換,例如 linux 下常用unicode(string, "utf8"),windows 下或許會用cp936吧,沒測試。
例程序

復(fù)制代碼 代碼如下:

#!/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: 正則表達(dá)式是一種很有用的處理文本的工具。
jp: 正規(guī)表現(xiàn)は非常に役に立つツールテキストを操作することです。
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")

其輸出結(jié)果為:
復(fù)制代碼 代碼如下:

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:
正則表達(dá)式是一種很有用的處理文本的工具。
正規(guī)表現(xiàn)は非常に役に立つツールテキストを操作することです。
あアいイうウえエおオ
정규
표현식은
매우
유용한
도구
텍스트를
조작하는
것입니다
。?!、,;:“
”‘
'——……·-·《》〈〉?。ぃィΓ?
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:
正則表達(dá)式是一種很有用的處理文本的工具
正規(guī)表現(xiàn)
非常


操作
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使用正則表達(dá)式去除中文文本多余空格,保留英文之間空格方法詳解
  • python3.x提取中文的正則表達(dá)式示例代碼
  • 淺談python下含中文字符串正則表達(dá)式的編碼問題
  • Python使用中文正則表達(dá)式匹配指定中文字符串的方法示例
  • Python正則表達(dá)式匹配中文用法示例
  • Python匹配中文的正則表達(dá)式
  • Python正則表達(dá)式如何匹配中文

標(biāo)簽:泰州 西安 宣城 長沙 綿陽 重慶 無錫 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python 中文正則表達(dá)式筆記》,本文關(guān)鍵詞  Python,中文,正則,表達(dá)式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python 中文正則表達(dá)式筆記》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python 中文正則表達(dá)式筆記的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章