算法 - 高手接招! 小应用 用python3判断一个字符串是不是中文组成的
ringa_lee
ringa_lee 2017-04-18 10:06:54
[Python讨论组]
ringa_lee
ringa_lee

ringa_lee

全部回复(3)
迷茫

在python3中,str默认是unicode编码

用 ord() 函数判断单个字符的unicode编码是否大于255即可。


一般来说,中文常用字的范围是:[\u4e00-\u9fa5]

准确点判断中文字符,可以这样比较:

>>> 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

既然 @依云 提出了编码范围的问题,就再补充一些~

详细的unicode分区信息可以参考这里:中日韩统一表意文字

楼主是问 判断中文的算法;很简单,就是比较字符编码的大小,落在cjk文字范围内,就是中文。
出了[\u4e00-\u9fa5]范围的汉字,多数是生僻字、异体字;如果很在意的话,可以参照下表,多加几个判断条件即可。
中文在unicode里的分区码段:

1、中日韩扩展部首[2E80-2EFF](116字)
2、康熙字典部首[2F00-2FDF](214字)
3、表意文字描述字符[2FF0-2FFF](12字)
4、中日韩笔画[31C0-31EF](37字)
5、中日韩统一表意文字扩展A区[3400-4DBF](6582字)
6、中日韩统一表意文字[4E00-9FFF](20940字)
7、私用区[E000-F8FF](896字)
8、中日韩兼容表意文字[F900-FAFF](471字)
9、中日韩统一表意文字扩展B区[20000-2A6DF](42711字)
10、中日韩统一表意文字扩展C区[2A700-2B73F](4149字)
11、中日韩统一表意文字扩展D区[2B740-2B81F](222字)
12、中日韩统一表意文字增补集[2F800-2FA1F](542字)
13、增补私用A区[F0000-FFFFF](73字)
大家讲道理

简单啦,你用正则匹配一下英文,标点,数字不就可以了么?

ringa_lee

regex

>>> import regex
>>> zh = regex.compile(r'^\p{Han}*$')
>>> zh.match('你好')
<regex.Match object; span=(0, 2), match='你好'>
>>> zh.match('<p>好')
>>>

只能保证是汉字,不能保证是中文,也可能是日文。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号