如何判断字符串是否只包含字母AND空格

时间:2015-04-05 06:30:47

标签: python string python-3.x for-loop

我无法弄清楚上面提到的问题并且感到很沮丧我应该用#34;来测试每个字符的字符串"但我真的无法弄清楚它是如何起作用的

这就是我现在所拥有但我知道它不能按预期工作,因为它只允许我测试字母,但我还需要知道空格,例如"我亲爱的阿姨莎莉"应该说是只包含字母和空格

    #Find if string only contains letters and spaces
    if string.isalpha():
      print("Only alphabetic letters and spaces: yes")
    else:
      print("Only alphabetic letters and spaces: no")

4 个答案:

答案 0 :(得分:5)

您可以在all内置函数中使用生成器表达式

if all(i.isalpha() or i.isspace() for i in my_string)

但请注意i.isspace()如果您只想space可以直接与空间进行比较,则会检查该字符是否为空格:

if all(i.isalpha() or i==' ' for i in my_string)

演示:

>>> all(i.isalpha() or i==' ' for i in 'test string')
True
>>> all(i.isalpha() or i==' ' for i in 'test    string') #delimiter is tab
False
>>> all(i.isalpha() or i==' ' for i in 'test#string')
False
>>> all(i.isalpha() or i.isspace() for i in 'test string')
True
>>> all(i.isalpha() or i.isspace() for i in 'test       string')
True
>>> all(i.isalpha() or i.isspace() for i in 'test@string')
False

答案 1 :(得分:1)

另一种有趣的方式,我知道它不那么好:

>>> a
'hello baby'
>>> b
'hello1 baby'
>>> re.findall("[a-zA-Z ]",a)==list(a)  # return True if string is only alpha and space
True
>>> re.findall("[a-zA-Z ]",b)==list(b) # returns False
False

答案 2 :(得分:0)

级联replaceisalpha

'a b'.replace(' ', '').isalpha() # True

replace返回原始字符串的副本,除了空格之外的所有内容。然后你可以在返回值上使用isalpha(因为返回值是一个字符串本身)来测试它是否只包含字母字符。

为了匹配所有空格,你可能会想要使用Kasra的答案,但为了完整起见,我将演示如何使用带有空白字符类的re.sub

import re
re.sub(r'\s', '', 'a b').isalpha()

答案 3 :(得分:0)

仅当输入包含字母或空格时,以下re.match函数才会返回匹配对象。

>>> re.match(r'[A-Za-z ]+$', 'test string')
<_sre.SRE_Match object; span=(0, 11), match='test string'>
>>> re.match(r'(?=.*? )[A-Za-z ]+$', 'test@bar')
>>>