Python:如何检查unicode字符串是否包含大小写字符?

标签 python unicode uppercase lowercase

我正在做一个过滤器,其中我检查 unicode(utf-8 编码)字符串是否不包含大写字符(在所有语言中)。如果字符串根本不包含任何大小写字符,我也没问题。

例如:“你好!”不会通过过滤器,而是“!”应该通过过滤器,因为“!”不是大小写字符。

我计划使用 islower() 方法,但在上面的示例中,"!".islower() 将返回 False。

根据 Python 文档,“如果 unicode 字符串的大小写字符全部为小写且字符串包含至少一个大小写字符,则 python unicode 方法 islower() 返回 True,否则返回 False。”

因为当字符串不包含任何大小写字符时,该方法也会返回 False,即。 “!”,我想检查字符串是否包含任何大小写字符。

像这样的....

string = unicode("!@#$%^", 'utf-8')

#check first if it contains cased characters
if not contains_cased(string):
     return True

return string.islower():

对 contains_cased() 函数有什么建议吗?

或者可能是不同的实现方法?

谢谢!

最佳答案

Here是关于 Unicode 字符类别的完整独家新闻。

信件类别包括:

Ll -- lowercase
Lu -- uppercase
Lt -- titlecase
Lm -- modifier
Lo -- other

请注意 Ll <-> islower() ;同样适用于 Lu ; (Lu or Lt) <-> istitle()

您可能希望阅读有关套管的复杂讨论,其中包括对 Lm 的一些讨论。字母。

盲目地将所有“字母”都按大小写处理显然是错误的。 Lo类别包括 BMP 中的 45301 个代码点(使用 Python 2.6 计算)。其中很大一部分是韩文音节、CJK 表意文字和其他东亚字符——很难理解如何将它们视为“cased”。

您可能会考虑基于您期望的“大小写字符”的(未指定)行为的替代定义。这是一个简单的第一次尝试:

>>> cased = lambda c: c.upper() != c or c.lower() != c
>>> sum(cased(unichr(i)) for i in xrange(65536))
1970
>>>

有趣的是,有 1216 x Ll 和 937 x Lu,总共 2153 ... Ll 和 Lu 的真正含义还有待进一步研究。

关于Python:如何检查unicode字符串是否包含大小写字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3508490/

相关文章:

python - 获取调用函数的模块和行

python - 如何通过命令行传递参数以在 Python 中设置环境

python - Unicode 问题,在 python 中正确解码/编码字符串

c++ - 如何将十六进制字符串转换为 C++ 中相应的整数?

php - 正则表达式字符串替换大写和小写

android - 如何将大写字母转换为小写字母?

python - 音频可视化

python - 正则表达式与我认为应该匹配的不匹配

r - R 可以将表情符号字符转换为对应的文本吗?

windows - Windows 批处理文件中区分大小写