我怎样才能检查一个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()
函数将为您工作。
看起来人们正在说使用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中添加一个空格。