Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一日一技:怎么中文也属于字母?

一日一技:怎么中文也属于字母?

作者头像
青南
发布于 2024-03-13 02:18:53
发布于 2024-03-13 02:18:53
1180
举报
文章被收录于专栏:未闻Code未闻Code

摄影:产品经理

佛跳墙

我最近在使用一个第三方库,叫做RapidFuzz。它有一个工具函数,叫做utils.default_process,在官方文档里面,是这样介绍的:

红色方框里面说,这个函数可以移除所有的非alphanumeric字符。如果我们使用翻译软件,会发现alphanumeric的意思是字母和数字。如下图所示:

因此,我想当然觉得,这个功能函数,只会保留26个英文字母的大小写加上10个数字,一共62个字符。把除此之外的所有其他字符都移除掉。

但我经过测试,它竟然没有办法过滤掉中文字符,如下图所示。难道终于也属于字母?

于是我到Github上面去给这个项目提Issue。但作者却说这个函数没有问题,并且使用Python.isalnum()来做测试,发现Python也会认为中文也是alphanumeric。如下图所示:

这就非常奇怪了,于是我找到Python官方文档,发现它是这样说的:

str.isalnum()[1] Return True if all characters in the string are alphanumeric and there is at least one character, False otherwise. A character c is alphanumeric if one of the following returns True: c.isalpha(), c.isdecimal(), c.isdigit(), or c.isnumeric().

说明'中文'.isalnum()返回True,显然是因为'中文'.isalpha()返回了True。而之所以.isalpha()会返回True,是因为它判断的不仅仅是英文字母,而是所有Unicode里面,类别为letter的字符:

str.isalpha()[2] Return True if all characters in the string are alphabetic and there is at least one character, False otherwise. Alphabetic characters are those characters defined in the Unicode character database as “Letter”, i.e., those with general category property being one of “Lm”, “Lt”, “Lu”, “Ll”, or “Lo”.

在Unicode标准网站UAX #44: Unicode Character Database[3]上面,可以看到它这里定义的LmLtLuLlLo的意思:

我们使用Python自带的unicodedata模块,可以看到中文字符的类型,确实是Lo,如下图所示:

所以,'中文'.isalpha()返回True确实是合理的。

以后看到alphanumeric,再也不要以为只有62个字符了。

参考资料

[1]

Link to this definition: https://docs.python.org/3/library/stdtypes.html#str.isalnum

[2]

Link to this definition: https://docs.python.org/3/library/stdtypes.html#str.isalpha

[3]

UAX #44: Unicode Character Database: https://unicode.org/reports/tr44/#General_Category_Values

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 编码的这些坑,你还在踩吗!?
utf-8: 可变长编码,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
昱良
2019/06/14
5090
Python字符串常见操作
参考链接:http://www.cnblogs.com/wupeiqi/articles/4911365.html
py3study
2020/01/19
5840
化异为同,Python 在背后帮你做的转换
我们知道,Python 的变量名是可以使用 Unicode 字符的,也就是非英文字母也可以当做变量名,例如:
青南
2020/06/24
6750
化异为同,Python 在背后帮你做的转换
Python数据类型之字符串
字符串是由字符组成的序列,是一个有序的字符的集合,用于存储和表示基本的文本信息,'' 或 " " 或 ''' '''中间包含的内容称之为字符串。
后场技术
2020/09/03
5990
Python数据类型之字符串
python的字符串学习(三)
学习Python语言,不得不学习在Python中,对字符串的处理,事实上,在Str类中提供了很多的方法来对字符串的处理,比如我们经常见的字符串的大小小写的处理,字符串的分割合并等,那么我们是怎么知道这些方法了?比如我定义了一个字符串,我怎么知道字符串的操作方法有哪些?
无涯WuYa
2018/10/25
5350
python的字符串学习(三)
一日一技:用二进制翻转26个字母的大小写
现在有一段只由大小写英文字母组成的字符串,例如xyzABCXYZabc。现在要把它的大小写字母翻转,变成XYZabcxyzABC。
青南
2020/02/19
1.3K0
一日一技:用二进制翻转26个字母的大小写
Java实现过滤中文乱码
Unicode编码是一种涵盖了世界上所有语言、标点等字符的编码方式,简单一点说,就是一种通用的世界码;其编码范围:U+0000 .. U+10FFFF。按Unicode硬编码的区间进行划分,Unicode编码被分成若干个block ( Unicode block);每一个Unicode编码专属于唯一的Unicode block,Unicode block之间互不重叠。从码字的本身的属性出发,Unicode编码被分成了若干script ( Unicode script);比如,与中文相关的字符、标点的scriptHan包括block如下:
Spark学习技巧
2020/12/28
1.7K0
Python 基础系列--开篇
Python 能带给我的,同样也能带给你,于是我决定尝试写一些 Python 基础系列文章,带你入门 Python,达到能使用 Python 解决日常问题的目的。同时也希望 Python 这门语言能带给你学习和编码的快乐。
somenzz
2020/12/10
4210
Python 基础系列--开篇
【玩转腾讯云】python help函数
python 3.x版本虽然比2.x少了一些内置函数,但是 python 内置 函数没有60个,也有40个,那么多内置函数你记得过来吗?为了方便使用,python 提供了help函数专门用来提供查看函数或模块用途的详细说明;
猿说编程[Python和C]
2020/03/23
1.8K0
编码 | Python竟然有隐藏功能,只有极少人知道!
产生这样结果的原因是Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
潘永斌
2020/01/13
4630
编码 | Python竟然有隐藏功能,只有极少人知道!
2024-12-13:有效单词。用go语言,要确定一个字符串是否为有效单词,需满足以下条件: 1.字符串至少包含3个字符。 2.
2024-12-13:有效单词。用go语言,要确定一个字符串是否为有效单词,需满足以下条件:
福大大架构师每日一题
2024/12/19
1040
2024-12-13:有效单词。用go语言,要确定一个字符串是否为有效单词,需满足以下条件: 1.字符串至少包含3个字符。 2.
Python字符编码全解析
字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念。本文主要分以下几个部分介绍: 基本概念 常见字符编码简介 Python 的默认编码 Python2 中的字符类型 UnicodeEncodeError & UnicodeDecodeError 根源 基本概念 字符(Character) 在电脑和电信领域中,字符是一个信息单位,它是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字
小小科
2018/05/04
1.4K0
Python字符编码全解析
python--一文搞懂字符串的编解码
我们在使用python处理中文字符串时总会遇到一些问题,特别是一些老项目需要用到python2,中文显示乱码,文件读写异常等问题时常发生。
languageX
2023/05/04
1.6K0
python len isalpha 中
近期在进行自然语言的处理,在使用len函数和isalpha函数时发现几个坑。现在略述一下,才疏学浅还请大牛批评指正。
py3study
2020/01/03
6200
C语言函数小集合
一、字符操作 函数名: fputc 功 能: 送一个字符到一个流中 用 法: int fputc(int ch, FILE *stream); 函数名: fputs 功 能: 送一个字符串到一个流中 用 法: int fputs(char *string, FILE *stream); 函数名: sprintf 功 能: 输出数据到一字符串中(而printf是输出到屏幕上) 函数名: fread 用 法: fread(fa,4,5,fp); 功 能: 其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中 函数名: strncmp 用 法: extern int strncmp(char *s1, char *s2, int n); 功 能: 比较字符串s1和s2的前n个字符。 详 细: 逐次比较两个字符串前n个字符中的每一个字符(用第一个字符串的字符的ASCII值减去第二个字符串的相应字符的ASCII值),如果相等则继续比较下一个;如果不等,ASCII的差值就是返回值。 函数名: isalnum 原型:extern int isalnum(int c); 用法:#include <ctype.h>  功能:判断字符c是否为字母或数字  说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。 函数名: isalpha 原型:extern int isalpha(int c); 用法:#include <ctype.h> 功能:判断字符c是否为英文字母 说明:当c为英文字母a-z或A-Z时,返回非零值,否则返回零。 函数名: iscntrl 原型:extern int iscntrl(int c); 用法:#include <ctype.h> 功能:判断字符c是否为控制字符 说明:当c在0x00-0x1F之间或等于0x7F(DEL)时,返回非零值,否则返回零。 函数名: isdigit 原型:extern int isdigit(int c); 用法:#include <ctype.h> 功能:判断字符c是否为数字 说明:当c为数字0-9时,返回非零值,否则返回零。 函数名: islower 原型:extern int islower(int c); 用法:#include <ctype.h> 功能:判断字符c是否为小写英文字母 说明:当c为小写英文字母(a-z)时,返回非零值,否则返回零。 函数名: isascii 原型:extern int isascii(int c); 用法:#include <ctype.h> 功能:判断字符c是否为ascii码 说明:当c为ascii码时,返回非零值,否则返回零。ascii码指0x00-0x7F之间的字符 函数名: isgraph 原型:extern int isgraph(int c); 用法:#include <ctype.h> 功能:判断字符c是否为除空格外的可打印字符 说明:当c为可打印字符(0x21-0x7e)时,返回非零值,否则返回零。 函数名: isprint 原型:extern int isprint(int c); 用法:#include <ctype.h> 功能:判断字符c是否为可打印字符(含空格) 说明:当c为可打印字符(0x20-0x7e)时,返回非零值,否则返回零。 函数名: ispunct 原型:extern int ispunct(int c); 用法:#include <ctype.h> 功能:判断字符c是否为标点符号 说明:当c为标点符号时,返回非零值,否则返回零。 标点符号指那些既不是字母数字,也不是空格的可打印字符。 函数名: isspace 原型:extern int isspace(int c); 用法:#include <ctype.h> 功能:判断字符c是否为空白符 说明:当c为空白符时,返回非零值,否则返回零。 空白符指空格、水平制表、垂直制表、换页、回车和换行符。 函数名: isupper 原型:extern int isupper(int c);  用法:#include <ctype.h>  功能:判断字符c是否为大写英文字母 说明:当c为大写英文字母(A-Z)时,返回非零值,否则返回零。 函数名: isxdigit 原型:extern int isxdigit(int c); 用法:#include <ctype.h> 功能:判断字符c是否为十六进制数字 说明:当c为A-F,a-f或0-9之间的十六进制数字时,返回非零值,否则返回零。 函数名: toascii 原型:extern int toascii(int c);
阳光岛主
2019/02/19
1.2K0
python str模块
str字符串 str 转义字符 格式化 内建函数 字符串 表示文字信息 用单引号,双引号,三引号括起来 s = 'I love ' print(s) I love s = "I love " print(s) I love s = """ I Love """ print(s) I Love 转义字符 用一个特色的方法表示出一系列不方便写出的内容,比如回车键,换行符,退格键 借助反斜杠字符,一旦字符串中出现反斜杠,则反斜杠后面一个或几个字符表示已经不是原来的意思了,进行了转义 在字符串中,一旦出现反斜
ruochen
2021/03/04
2.2K0
python str模块
UnicodeEncodeError: ‘ascii‘ codec can‘t encode character 完美解决方法
大家好,我是默语,专注于全栈开发、运维与人工智能技术。今天的文章将深入探讨 Python 编程中常见的错误——UnicodeEncodeError: 'ascii' codec can't encode character。这个错误通常出现在编码和解码字符集的过程中,尤其是在处理非 ASCII 字符时。本文将介绍该错误的成因、如何复现以及提供多种解决方案,帮助开发者们有效地避免和修复此问题。
默 语
2024/11/22
8660
python 之 string() 模块
common string oprations import string 1. string constants(常量)
用户7886150
2021/01/14
5140
(28) 剖析包装类 (下) / 计算机程序的思维逻辑
本节探讨Character类,它的基本用法我们在包装类第一节已经介绍了,本节不再赘述。Character类除了封装了一个char外,还有什么可介绍的呢?它有很多静态方法,封装了Unicode字符级别的各种操作,是Java文本处理的基础,注意不是char级别,Unicode字符并不等同于char,本节详细介绍这些方法以及相关的Unicode知识。 在介绍这些方法之前,我们需要回顾一下字符在Java中的表示方法,我们在第六节、第七节、第八节介绍过编码、Unicode、char等知识,我们先简要回顾一下。 Uni
swiftma
2018/01/31
6770
【Python3】02、python编码
       因为字符编码的问题而苦恼不已,于是阅读了大量的博客,再进行了一定的测试,基本搞清楚了编码问题的前因后果。
py3study
2020/01/06
7250
相关推荐
Python 编码的这些坑,你还在踩吗!?
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档