如何检查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 udlatin_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