Python 2.x中unicode字符串的string.ascii_letters等价物是什么?

14 投票
4 回答
6384 浏览
提问于 2025-04-15 18:24

在标准库的“字符串”模块中,

string.ascii_letters ## Same as string.ascii_lowercase + string.ascii_uppercase

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

有没有类似的常量,可以包含所有在unicode中被认为是字母的字符呢?

4 个回答

0

这将是一个非常庞大的常量。现在,Unicode已经包含了超过100,000个不同的字符。所以答案是否定的。

那么,问题是你为什么需要这个呢?也许你可以用unicodedata模块的其他方法来解决你的问题。

更新:你可以从 ftp://ftp.unicode.org/ 下载包含所有Unicode数据点名称和其他信息的文件,然后用这些文件做很多有趣的事情。

7

这里没有字符串,但你可以使用 unicodedata 模块来检查一个字符是否是字母,特别是它的 category() 函数。

>>> unicodedata.category(u'a')
'Ll'
>>> unicodedata.category(u'A')
'Lu'
>>> unicodedata.category(u'5')
'Nd'
>>> unicodedata.category(u'ф') # Cyrillic f.
'Ll'
>>> unicodedata.category(u'٢') # Arabic-indic numeral for 2.
'Nd'

Ll 表示“字母,小写”。 Lu 表示“字母,大写”。 Nd 表示“数字,数字字符”。

11

你可以用下面的方式来创建你自己的包含大写和小写字母的Unicode常量:

import unicodedata as ud
all_unicode = ''.join(unichr(i) for i in xrange(65536))
unicode_letters = ''.join(c for c in all_unicode
                          if ud.category(c)=='Lu' or ud.category(c)=='Ll')

这样会生成一个长度为2153个字符的字符串(这是在窄Unicode Python版本下)。如果你有像 letter in unicode_letters 这样的代码,使用集合会更快一些:

unicode_letters = set(unicode_letters)

撰写回答