首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“.isalpha”.isalpha()是真,但是"!".isalpha()是假的呢?

为什么“.isalpha”.isalpha()是真,但是"!".isalpha()是假的呢?
EN

Stack Overflow用户
提问于 2021-06-24 08:35:15
回答 2查看 232关注 0票数 1

我刚刚发现了来自IANA的这种奇怪的行为解析数据。

代码语言:javascript
复制
"ǃ".isalpha() # returns True
"!".isalpha() # returns False

显然,这两个感叹号是不同的:

代码语言:javascript
复制
In [62]: hex(ord("ǃ"))                                                          
Out[62]: '0x1c3'

In [63]: hex(ord("!"))                                                          
Out[63]: '0x21'

只是想知道有什么办法可以防止这种情况发生吗?这种行为的根源是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-24 10:01:26

检查Unicode数据库中的字符。感叹号样的ǃ (\u1c3)是一个字母:

代码语言:javascript
复制
import unicodedata
for c in "!ǃ":
    print(c,'{:04x}'.format(ord(c)),unicodedata.category(c), unicodedata.name(c))

!0021 Po感叹号马克ǃ01c3 Lo拉丁字母倒带点击

票数 1
EN

Stack Overflow用户

发布于 2021-06-24 08:41:14

从医生那里:

str.isalpha()

如果字符串中的所有字符都是字母,并且至少有一个字符,否则返回True。字母字符是在Unicode 字符数据库中定义为“字母”的字符,即具有“Lm”、“Lt”、“Lu”、“Ll”或“Lo”的一般类别属性的字符。请注意,这与Unicode标准中定义的“字母”属性不同。

这意味着您使用的utf字符定义为utf数据库中的字母。

代码语言:javascript
复制
>>> ord("ǃ")
   451

看看维基百科UTF字符列表,字符ǃ属于拉丁文扩展B,这就是isalpha返回True的原因

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68112289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档