如何检查Python Unicode字符串是否包含非西方字母?

我有一个Python Unicode字符串。我想确保它只包含罗马字母(A到Z)的字母,以及欧洲字母中常见的字母,例如ß,ü,ø,é,à和î。它应该不包含其他字母(中国,日本,韩语,阿拉伯语,俄语,希伯来语等)的字符。最好的方法是什么?

目前,我正在使用这段代码,但是我不知道这是否是最好的方法:

def only_roman_chars(s):

try:

s.encode("iso-8859-1")

return True

except UnicodeDecodeError:

return False

(我正在使用Python 2.5。我也在Django中执行此操作,因此,如果Django框架碰巧具有处理此类字符串的方式,则可以使用该功能-但是,我还没有遇到过类似的事情。)

回答:

import unicodedata as ud

latin_letters= {}

def is_latin(uchr):

try: return latin_letters[uchr]

except KeyError:

return latin_letters.setdefault(uchr, 'LATIN' in ud.name(uchr))

def only_roman_chars(unistr):

return all(is_latin(uchr)

for uchr in unistr

if uchr.isalpha()) # isalpha suggested by John Machin

>>> only_roman_chars(u"ελληνικά means greek")

False

>>> only_roman_chars(u"frappé")

True

>>> only_roman_chars(u"hôtel lœwe")

True

>>> only_roman_chars(u"123 ångstrom ð áß")

True

>>> only_roman_chars(u"russian: гага")

False

以上是 如何检查Python Unicode字符串是否包含非西方字母? 的全部内容, 来源链接: utcz.com/qa/404527.html

回到顶部