用正則表達式匹配漢字,完整總結


提到用正則表達式匹配漢字,很容易搜到這個[\u4e00-\u9fa5],但是它不算全面,不包含一些生僻漢字。

本文對此問題做一個梳理。

 

以下是比較全面的漢字Unicode分布,參考Unicode 10.0標准(2017年6月發布):

區塊 范圍 實際漢字個數/
備注
正則式
CJK統一漢字

4E00-62FF, 6300-77FF,

7800-8CFF, 8D00-9FFF.

20,971
常見

[\u4E00-\u9FFF] 或

[一-鿆]

CJK統一漢字擴展A區 3400-4DBF. 6,582
罕見
[\u3400-\u4DBF]
CJK統一漢字擴展B區

20000-215FF, 21600-230FF,

23100-245FF, 24600-260FF,

26100-275FF, 27600-290FF,

29100-2A6DF.

42,711
罕見,歷史
[\U00020000-\U0002A6DF]
CJK統一漢字擴展C區 2A700-2B73F. 4,149
罕見,歷史
[\U0002A700-\U0002B73F]
CJK統一漢字擴展D區 2B740–2B81F. 222
不常見,仍在使用
[\U0002B740-\U0002B81F]
CJK統一漢字擴展E區 2B820–2CEAF. 5,762
罕見,歷史
[\U0002B820-\U0002CEAF]
CJK統一漢字擴展F區 2CEB0-2EBEF. 7,473
罕見,歷史
[\U0002CEB0-\U0002EBEF]
CJK兼容漢字 F900–FAFF. 472
重復、可統一變體、公司定義
 [\uF900-\uFAFF]
CJK兼容漢字增補 2F800-2FA1F. 542
可統一變體
[\U0002F800-\U0002FA1F]

 

★ 如果想表示最普遍的漢字,用:

[\u4E00-\u9FFF]  或   [一-鿆]

共有20950個漢字,包括了常用簡體字和繁體字,等字。

基本就是GBK的所有(21003個)漢字。也包括了BIG5的所有(13053個)繁體漢字。

一般情況下這個就夠用了。

說明:

僅僅未包括出現在GBK里的CJK兼容漢字的21個漢字:郎秊裏隣嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩

CJK兼容漢字用於轉碼處理,日常中是用不到的,所以不包括也沒什么問題。

注意此非彼也不是常用的那個,雖然用眼睛看是一樣的,參見 http://www.zhihu.com/question/20697984

 

★ 如果想表示BMP之內的漢字,也就是Unicode值<=0xFFFF之內的所有漢字,用:

[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]

這個包含但不限於GBK定義的漢字,共有28025個漢字。

說明:

和上面相比,主要是多了CJK統一漢字擴展A區,這是1999年收錄到Unicode 3.0標准里的6,582個漢字。

CJK統一漢字擴展A區,包括了東亞各地區(陸港台日韓新越)的漢字,有很多康熙字典的繁體字。

 

★ 如果想盡可能表示所有的漢字,用:

[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF\U00020000-U0002EBEF]

這個包含上表的所有88342個漢字

 

說明:

1, 以上正則表達式不會匹配(英文、漢字的)標點符號不會匹配韓國拼音字、日本假名。

2, 匹配一些日本、韓國獨有的漢字。

3, 包含了一些沒有漢字的空位置,通常不礙事。

4, \u及\U的正則語法在Python 3.5上測試通過。

有些正則表達式引擎不認\uFFFF和\UFFFFFFFF這樣的語法,可以換成\x{FFFF}試一下;有些不支持BMP之外的范圍,這就沒辦法處理CJK統一漢字擴展B~E區,如notepad++


免責聲明!

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



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