由于業(yè)務(wù)需求,需要寫(xiě)一個(gè)小程序,來(lái)判斷一個(gè)字符串中是不是純中文字符 ( 一個(gè)字符串中不能包含符號(hào),英文 )比如
a = "你好"
這個(gè)就是一個(gè)純中文
再比如
a = "</p>你好"
這個(gè)就不行~
那么需要如何優(yōu)雅的來(lái)實(shí)現(xiàn)?
3 回答

拉莫斯之舞
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
在python3中,str默認(rèn)是unicode編碼
用 ord() 函數(shù)判斷單個(gè)字符的unicode編碼是否大于255
即可。
一般來(lái)說(shuō),中文常用字的范圍是:[\u4e00-\u9fa5]
準(zhǔn)確點(diǎn)判斷中文字符,可以這樣比較:
>>> X,Y = ['\u4e00','\u9fa5']
>>> X<='阿'<=Y
True
例子:
>>> a = "你好";b = "</p>你好"
>>> def isAllZh(s):
for c in s:
if not('\u4e00' <= c <= '\u9fa5'):
return False
return True
>>> isAllZh(a)
True
>>> isAllZh(b)
False
#或者用 all()
>>> all(map(lambda c:'\u4e00' <= c <= '\u9fa5',a))
True
>>> all(map(lambda c:'\u4e00' <= c <= '\u9fa5',b))
False
既然 @依云 提出了編碼范圍的問(wèn)題,就再補(bǔ)充一些~
詳細(xì)的unicode分區(qū)信息可以參考這里:中日韓統(tǒng)一表意文字
樓主是問(wèn) 判斷中文的算法
;很簡(jiǎn)單,就是比較字符編碼的大小,落在cjk
文字范圍內(nèi),就是中文。
出了[\u4e00-\u9fa5]
范圍的漢字,多數(shù)是生僻字、異體字;如果很在意的話,可以參照下表,多加幾個(gè)判斷條件即可。
中文在unicode里的分區(qū)碼段:
1、中日韓擴(kuò)展部首[2E80-2EFF](116字)
2、康熙字典部首[2F00-2FDF](214字)
3、表意文字描述字符[2FF0-2FFF](12字)
4、中日韓筆畫(huà)[31C0-31EF](37字)
5、中日韓統(tǒng)一表意文字?jǐn)U展A區(qū)[3400-4DBF](6582字)
6、中日韓統(tǒng)一表意文字[4E00-9FFF](20940字)
7、私用區(qū)[E000-F8FF](896字)
8、中日韓兼容表意文字[F900-FAFF](471字)
9、中日韓統(tǒng)一表意文字?jǐn)U展B區(qū)[20000-2A6DF](42711字)
10、中日韓統(tǒng)一表意文字?jǐn)U展C區(qū)[2A700-2B73F](4149字)
11、中日韓統(tǒng)一表意文字?jǐn)U展D區(qū)[2B740-2B81F](222字)
12、中日韓統(tǒng)一表意文字增補(bǔ)集[2F800-2FA1F](542字)
13、增補(bǔ)私用A區(qū)[F0000-FFFFF](73字)

慕運(yùn)維8079593
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
>>> import regex
>>> zh = regex.compile(r'^\p{Han}*$')
>>> zh.match('你好')
<regex.Match object; span=(0, 2), match='你好'>
>>> zh.match('<p>好')
>>>
只能保證是漢字,不能保證是中文,也可能是日文。
添加回答
舉報(bào)
0/150
提交
取消