国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > regex > 正文

Python 中文正則表達式筆記

2020-01-20 22:18:16
字體:
供稿:網(wǎng)友

從字符串的角度來說,中文不如英文整齊、規(guī)范,這是不可避免的現(xiàn)實。本文結(jié)合網(wǎng)上資料以及個人經(jīng)驗,以 python 語言為例,稍作總結(jié)。歡迎補充或挑錯。
一點經(jīng)驗
可以使用 repr()函數(shù)查看字串的原始格式。這對于寫正則表達式有所幫助。
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]+",來自定義所需要匹配的文本。
匹配中文時,正則表達式和目標字串的格式必須相同。這一點至關(guān)重要。或者都用默認的utf8,此時你不用額外做什么;如果是unicode,就需要在正則式之前加上u""格式。
可以這樣定義unicode字符串:string=u"我愛正則表達式"。如果字串不是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: 正則表達式是一種很有用的處理文本的工具。
jp: 正 主站蜘蛛池模板: 平塘县| 岳池县| 新民市| 哈尔滨市| 酉阳| 温泉县| 醴陵市| 邢台县| 冷水江市| 乐陵市| 镇宁| 黄大仙区| 江阴市| 工布江达县| 榕江县| 专栏| 习水县| 丰顺县| 通河县| 岗巴县| 静安区| 雅江县| 侯马市| 名山县| 汉沽区| 阳东县| 桃园市| 阳高县| 灌云县| 大田县| 宁波市| 宜兰市| 云安县| 平乡县| 龙里县| 兴海县| 济阳县| 古蔺县| 永靖县| 北辰区| 大兴区|