提到用正則表達(dá)式匹配漢字,很容易搜到這個(gè)[\u4e00-\u9fa5],但是它不算全面,不包含一些生僻漢字。
本文對(duì)此問(wèn)題做一個(gè)梳理。
以下是比較全面的漢字Unicode分布,參考Unicode 10.0標(biāo)準(zhǔn)(2017年6月發(fā)布):
區(qū)塊 | 范圍 | 實(shí)際漢字個(gè)數(shù)/ 備注 | 正則式 |
CJK統(tǒng)一漢字 | 4E00-62FF, 6300-77FF, 7800-8CFF, 8D00-9FFF. | 20,971 常見(jiàn) | [\u4E00-\u9FFF] 或 [一-?] |
CJK統(tǒng)一漢字?jǐn)U展A區(qū) | 3400-4DBF. | 6,582 罕見(jiàn) | [\u3400-\u4DBF] |
CJK統(tǒng)一漢字?jǐn)U展B區(qū) | 20000-215FF, 21600-230FF, 23100-245FF, 24600-260FF, 26100-275FF, 27600-290FF, 29100-2A6DF. | 42,711 罕見(jiàn),歷史 | [\U00020000-\U0002A6DF] |
CJK統(tǒng)一漢字?jǐn)U展C區(qū) | 2A700-2B73F. | 4,149 罕見(jiàn),歷史 | [\U0002A700-\U0002B73F] |
CJK統(tǒng)一漢字?jǐn)U展D區(qū) | 2B740–2B81F. | 222 不常見(jiàn),仍在使用 | [\U0002B740-\U0002B81F] |
CJK統(tǒng)一漢字?jǐn)U展E區(qū) | 2B820–2CEAF. | 5,762 罕見(jiàn),歷史 | [\U0002B820-\U0002CEAF] |
CJK統(tǒng)一漢字?jǐn)U展F區(qū) | 2CEB0-2EBEF. | 7,473 罕見(jiàn),歷史 | [\U0002CEB0-\U0002EBEF] |
CJK兼容漢字 | F900–FAFF. | 472 重復(fù)、可統(tǒng)一變體、公司定義 | [\uF900-\uFAFF] |
CJK兼容漢字增補(bǔ) | 2F800-2FA1F. | 542 可統(tǒng)一變體 | [\U0002F800-\U0002FA1F] |
★ 如果想表示最普遍的漢字,用:
[\u4E00-\u9FFF] 或 [一-?]
共有20950個(gè)漢字,包括了常用簡(jiǎn)體字和繁體字,镕等字。
基本就是GBK的所有(21003個(gè))漢字。也包括了BIG5的所有(13053個(gè))繁體漢字。
一般情況下這個(gè)就夠用了。
說(shuō)明:
僅僅未包括出現(xiàn)在GBK里的CJK兼容漢字的21個(gè)漢字:郎凉秊裏隣兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩
CJK兼容漢字用于轉(zhuǎn)碼處理,日常中是用不到的,所以不包括也沒(méi)什么問(wèn)題。
注意此凉非彼涼,兀也不是常用的那個(gè),雖然用眼睛看是一樣的,參見(jiàn) http://www.zhihu.com/question/20697984
★ 如果想表示BMP之內(nèi)的漢字,也就是Unicode值<=0xFFFF之內(nèi)的所有漢字,用:
[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]
這個(gè)包含但不限于GBK定義的漢字,共有28025個(gè)漢字。
說(shuō)明:
和上面相比,主要是多了CJK統(tǒng)一漢字?jǐn)U展A區(qū),這是1999年收錄到Unicode 3.0標(biāo)準(zhǔn)里的6,582個(gè)漢字。
CJK統(tǒng)一漢字?jǐn)U展A區(qū),包括了東亞各地區(qū)(陸港臺(tái)日韓新越)的漢字,有很多康熙字典的繁體字。
★ 如果想盡可能表示所有的漢字,用:
[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF\U00020000-U0002EBEF]
這個(gè)包含上表的所有88342個(gè)漢字
說(shuō)明:
1, 以上正則表達(dá)式不會(huì)匹配(英文、漢字的)標(biāo)點(diǎn)符號(hào),不會(huì)匹配韓國(guó)拼音字、日本假名。
2, 會(huì)匹配一些日本、韓國(guó)獨(dú)有的漢字。
3, 包含了一些沒(méi)有漢字的空位置,這通常不礙事。
4, \u及\U的正則語(yǔ)法在Python 3.5上測(cè)試通過(guò)。
有些正則表達(dá)式引擎不認(rèn)\uFFFF和\UFFFFFFFF這樣的語(yǔ)法,可以換成\x{FFFF}試一下;有些不支持BMP之外的范圍,這就沒(méi)辦法處理CJK統(tǒng)一漢字?jǐn)U展B~E區(qū)了,如notepad++。
聯(lián)系客服