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