在标准库的“串”模块

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

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

是否有类似的恒定,其中将包括一切,被认为是为Unicode信?

有帮助吗?

解决方案

您可以上构建自己的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)

其他提示

有没有字符串,但你可以检查一个字符是否是使用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手段 “数字,数字”。

这将是一个非常巨大的常数。统一目前占地面积超过10万不同的字符。因此,答案是否定的。

现在的问题是,为什么你会需要它?可能有解决的一些其他的方式无论您的问题是与unicodedata模块,例如。

更新:您可以从 ftp://ftp.unicode.org下载带有所有Unicode数据点名称等信息的文件/ ,做的有趣的东西负荷这一点。

如前面的答案中提到,该字符串确实是的办法的太长。所以,你必须目标(一)特定语言(S)。结果 [编辑:我意识到这是我的原用途的情况下,对于一般用途,我猜。然而,在此期间,马克Tolonen给了一个很好的回答这个问题,因为它是问,所以我选择了他的答案,虽然我用以下解决方案]

这是很容易与“区域”模块完成的:

import locale
import string
code = 'fr_FR' ## Do NOT specify encoding (see below)
locale.setlocale(locale.LC_CTYPE, code)
encoding = locale.getlocale()[1]
letters = string.letters.decode(encoding)

用 “字母” 是一个117个字符的长Unicode字符串。

显然,string.letters依赖于编码所选择的语言码,而不是在语言本身的缺省值。设置区域设置为fr_FR或de_DE这个或es_ES将更新string.letters为相同的值(因为它们都是在ISO8859-1默认编码)。

如果添加到编码的语言码(de_DE.UTF-8),默认的编码将被代替用于string.letters。这将导致一个UnicodeDecodeError错误如果使用上面的代码的其余部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top