use*_*401 44 python string conditional-statements
我正在尝试检查字符串是否只包含字母,而不是数字或符号.
例如:
>>> only_letters("hello")
True
>>> only_letters("he7lo")
False
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 86
简单:
if string.isalpha():
print("It's all letters")
Run Code Online (Sandbox Code Playgroud)
str.isalpha()仅当字符串中的所有字符都是字母时才为真:
如果字符串中的所有字符都是字母并且至少有一个字符,则返回true,否则返回false.
演示:
>>> 'hello'.isalpha()
True
>>> '42hello'.isalpha()
False
>>> 'hel lo'.isalpha()
False
Run Code Online (Sandbox Code Playgroud)
cmd*_*cmd 15
该str.isalpha()功能有效.即.
if my_string.isalpha():
print('it is letters')
Run Code Online (Sandbox Code Playgroud)
对于通过Google发现此问题的人可能想知道字符串是否仅包含所有字母的子集,我建议使用正则表达式:
import re
def only_letters(tested_string):
match = re.match("^[ABCDEFGHJKLM]*$", tested_string)
return match is not None
Run Code Online (Sandbox Code Playgroud)
您可以利用正则表达式。
>>> import re
>>> pattern = re.compile("^[a-zA-Z]+$")
>>> pattern.match("hello")
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> pattern.match("hel7lo")
>>>
Run Code Online (Sandbox Code Playgroud)
如果找到匹配项,该match()方法将返回一个Match对象。否则它会返回None。
更简单的方法是使用.isalpha()方法
>>> "Hello".isalpha()
True
>>> "Hel7lo".isalpha()
False
Run Code Online (Sandbox Code Playgroud)
isalpha() 如果字符串中至少有 1 个字符并且字符串中的所有字符都是字母,则返回 true。
看起来人们都在说使用str.isalpha.
这是检查所有字符是否都是字母的单行函数.
def only_letters(string):
return all(letter.isalpha() for letter in string)
Run Code Online (Sandbox Code Playgroud)
all接受一个可迭代的布尔值,并返回Trueiff所有布尔值True.
更一般地,如果将考虑迭代中的对象,则all返回.这些将被考虑TrueTrueFalse
Nonelen(list) == 0)False.(杜)实际上,我们现在处于21世纪的全球化世界中,人们不再仅使用ASCII进行通信,因此,在对“是否仅字母”提出疑问时,您还需要考虑非ASCII字母中的字母。Python有一个非常酷的unicodedata库,除其他功能外,它还可以对Unicode字符进行分类:
unicodedata.category('?')
'Lo'
unicodedata.category('A')
'Lu'
unicodedata.category('1')
'Nd'
unicodedata.category('a')
'Ll'
Run Code Online (Sandbox Code Playgroud)
的类别和它们的缩写在Unicode标准定义。从这里您可以很容易地想到一个这样的函数:
def only_letters(s):
for c in s:
cat = unicodedata.category(c)
if cat not in ('Ll','Lu','Lo'):
return False
return True
Run Code Online (Sandbox Code Playgroud)
然后:
only_letters('Bzdr??y?o')
True
only_letters('He7lo')
False
Run Code Online (Sandbox Code Playgroud)
如您所见,白名单类别可以很容易地通过函数内部的元组进行控制。请参阅本文以进行更详细的讨论。