Python 正則表達式完美匹配中文與中文標點符號


匹配中文標點符號: [\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]
匹配中文字符的正則表達式: [\u4e00-\u9fa5]

import re

s = "\n\r\t@#$%^&*這樣一本書大賣,有點意外,據說已經印了四五十萬,排行榜僅次於《希拉里自傳》。大概是大眾拋棄了一位表演過火的“文化大師”后,需要再找一位有格調的“文化飾品”來裝點吧?書的裝幀果然有品格,書皮是淡棕色的皺紋紙,書攤老板告訴我這紙是進口的。有一個加印版是綠色封皮,差很多。開始出於對熱買書的反感,沒有下手。雖然很喜歡作者,但近兩年,買了一些早先鍾愛的作家的新作,大失所望,故此這次謹慎很多。單位主編買了一本,邊審節目邊看,淚水漣漣(這位領導為四十出頭的女性)。干脆借來一觀。半天一口氣讀完大半,晚上睡前讀完了。睡時心里像糾了一個結,很像以前特投入地讀完一本武俠書,悵然若失,隨着最后一頁書合上,一個世界也合上了大門。楊絳的以前的書基本都讀過,包括錢鍾書題寫書名的三卷集,寫知識分子思想改造、反右干校,寫她父親的文章印象特別深刻。但從沒有像這本書,整本筆墨都是在寫她最親的兩個人,丈夫和女兒。以往一直覺得楊絳的筆鋒有點像奧斯丁,用很干凈疏朗的筆法寫身邊瑣事,即使是大事變,捕捉的也是實實在在的細處。以前的印象是冷靜,情緒流露雖只是輕輕點一下,但仍透着一股貴族氣在里頭。有一位知青作家就特受不了,譬如《干校六記》中的一處,寫她路見一落魄小將,如狼崽子一般,心下不由生出點快意。錢鍾書的夫人自然是有傲氣的。但《我們仨》太不一樣了,記述她女兒罹患惡疾病故的那一章(第二部分),那種痛楚簡直是傾瀉紙面,雖然作者故意采用夢境式的虛幻技巧(這一手法她在《將飲茶》中已經牛刀小試,這里已經成演變為獨立的一章了),想造成間離(估計老太太自己也受不了直接面對這段時間),但依然能見到處處淚漬,大概很少有讀者能經受得起。我也步了女主編的后塵。有位老前輩評點說,楊絳的這本新書是她最差的一本,或許指的就是這點吧。在時人看來,讓人掉眼淚的書似乎品格有問題。第三部分又回到了楊絳的一貫筆法,記述和錢鍾書、錢媛共度的歲月,流暢極了,很好讀,一個大學者原來是那么童稚的一個人,在書中,一家三口的心性似乎永遠停留在那段黃金歲月:即封面那張四十年代的合影,圓圓。七十歲的老人、五十多歲的女兒,依舊開着五十年前的玩笑,太動人了。我就像在觀看神仙的游戲。最后老太太淡淡記道:現在只剩下我一個人,懷念着我們仨。我是打亂次序讀,先讀第一部分(序),隨后是第三部分,第二部分,反而印象比較好。或許順着讀,先撕心裂肺痛了一下,效果並不佳。推薦倒着看。\n\s\r\t"
t= re.findall('[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5]',s)
print(''.join(t))

 

匹配中文字符的正則表達式: [/u4e00-/u9fa5]
評注:匹配中文還真是個頭疼的事,有了這個表達式就好辦了

匹配雙字節字符(包括漢字在內):[^/x00-/xff]
評注:可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

匹配空白行的正則表達式:/n/s*/r
評注:可以用來刪除空白行

匹配HTML標記的正則表達式:<(/S*?)[^>]*>.*?<//1>|<.*? />
評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於復雜的嵌套標記依舊無能為力

匹配首尾空白字符的正則表達式:^/s*|/s*$
評注:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式

匹配Email地址的正則表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
評注:表單驗證時很實用

匹配網址URL的正則表達式:[a-zA-z]+://[^/s]*
評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求

匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下划線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
評注:表單驗證時很實用

匹配國內電話號碼:/d{3}-/d{8}|/d{4}-/d{7}
評注:匹配形式如 0511-4405222 或 021-87888822

匹配騰訊QQ號:[1-9][0-9]{4,}
評注:騰訊QQ號從10000開始

匹配中國郵政編碼:[1-9]/d{5}(?!/d)
評注:中國郵政編碼為6位數字

匹配身份證:/d{15}|/d{18}
評注:中國的身份證為15位或18位

匹配ip地址:/d+/./d+/./d+/./d+
評注:提取ip地址時有用

匹配特定數字:
^[1-9]/d*$    //匹配正整數
^-[1-9]/d*$   //匹配負整數
^-?[1-9]/d*$   //匹配整數
^[1-9]/d*|0$  //匹配非負整數(正整數 + 0)
^-[1-9]/d*|0$   //匹配非正整數(負整數 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$   //匹配正浮點數
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$  //匹配負浮點數
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$  //匹配浮點數
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$   //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$  //匹配非正浮點數(負浮點數 + 0)
評注:處理大量數據時有用,具體應用時注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26個英文字母組成的字符串
^[A-Z]+$  //匹配由26個英文字母的大寫組成的字符串
^[a-z]+$  //匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字符串
^/w+$  //匹配由數字、26個英文字母或者下划線組成的字符串
評注:最基本也是最常用的一些表達式

在Perl:

從ISO 8859-1到UTF-8: s/([/x80-/xFF])/chr(0xC0|ord($1)>>6).chr(0x80|ord($1)&0x3F)/eg;

從UTF-8到ISO 8859-1: s/([/xC2/xC3])([/x80-/xBF])/chr(ord($1)<<6&0xC0|ord($2)&0x3F)/eg;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM