如何检查字符串中是否只包含Python中的字母?

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)

  • 注意:在python2中,这不是unicode,所以`"ä".isalpha()`是假的.但是,在python3`"ä".isalpha()`是True,因为python3的unicode字符串是defaulty. (15认同)

cmd*_*cmd 15

str.isalpha()功能有效.即.

if my_string.isalpha():
    print('it is letters')
Run Code Online (Sandbox Code Playgroud)


Mar*_*oma 9

对于通过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)

  • 很抱歉去挑剔,但你的例子中的正则表达式也可以是`^ [A-HJ-M]*$`,这在我看来更具可读性. (7认同)

Sha*_*ail 7

您可以利用正则表达式。

>>> 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。


Ami*_*ade 6

string.isalpha()功能将适合您.

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


hli*_*117 6

看起来人们都在说使用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

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

  • `isalpha`已经检查过每一封信.没有必要多次使用它. (4认同)

kra*_*etz 6

实际上,我们现在处于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)

如您所见,白名单类别可以很容易地通过函数内部的元组进行控制。请参阅本文以进行更详细的讨论。