我怎样才能检查一个string是否只包含Python中的字母?

我试图检查一个string是否只包含字母,而不是数字或符号。

例如:

>>> only_letters("hello") True >>> only_letters("he7lo") False 

简单:

 if string.isalpha(): print("It's all letters") 

str.isalpha()仅当string中的所有字符都是字母时才为真:

如果string中的所有字符都是字母,并且至less有一个字符,则返回true,否则返回false。

演示:

 >>> 'hello'.isalpha() True >>> '42hello'.isalpha() False >>> 'hel lo'.isalpha() False 

str.isalpha()函数起作用。 即。

 if my_string.isalpha(): print('it is letters') 

对于通过Google发现这个问题的人,他们可能想知道一个string是否只包含所有字母的一个子集,我build议使用正则expression式:

 import re def only_letters(tested_string): match = re.match("^[ABCDEFGHJKLM]*$", tested_string) return match is not None 

string.isalpha()函数将为您工作。

请参阅http://www.tutorialspoint.com/python/string_isalpha.htm

看起来人们正在说使用str.isalpha

这是检查所有字符是否是字母的单行函数。

 def only_letters(string): return all(letter.isalpha() for letter in string) 

all接受一个布尔types的迭代器,并且如果所有布尔types都为True ,则返回True

更一般地说,如果iterable中的对象将被视为True ,则all返回True 。 这些将被视为False

  • 0
  • None
  • 空数据结构(即: len(list) == 0
  • False 。 (杜)

实际上,我们现在处于21世纪的全球化世界,人们不再仅仅使用ASCII进行通信,所以当你想知道“是否只有字母”这个问题时,你还需要考虑非ASCII字母。 Python有一个非常酷的unicodedata库,这个库允许对Unicode字符进行分类:

 unicodedata.category('陳') 'Lo' unicodedata.category('A') 'Lu' unicodedata.category('1') 'Nd' unicodedata.category('a') 'Ll' 

类别及其缩写是在Unicode标准中定义的。 从这里你可以很容易地想出一个这样的function:

 def only_letters(s): for c in s: cat = unicodedata.category(c) if cat not in ('Ll','Lu','Lo'): return False return True 

接着:

 only_letters('Bzdrężyło') True only_letters('He7lo') False 

正如您所看到的,列入白名单的类别可以很容易地由函数内的元组来控制。 看到这篇文章更详细的讨论。

 func only_letters(str): return not any(str.isdigit(c) for c in str) 

我想出了一个非常简单的解决scheme:(Python 3)

  def only_letters(tested_string): for letter in tested_string: if not letter in "abcdefghjklmnopqrstuvwxyz": return False return True 

如果您想要允许空格,您可以在要检查的string中添加一个空格。