2015-04-05 130 views
4

我无法弄清楚上述问题并有感染我应该用“字符串中的字符”测试每个字符,但是我无法真正弄清楚将工作我如何判断一个字符串是否只包含字母和空格

这是我现在的,但我知道它不工作,因为它只允许我测试字母,但我也需要知道空间,例如“我亲爱的阿姨莎莉”应该说是只包含字母和空格

#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") 
+0

您是否希望函数为'foo'返回true? – 2015-04-05 06:35:27

回答

0

级联replaceisalpha

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

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

匹配所有的空白,你可能会想使用Kasra的答案,但只是为了完整性,我将演示使用re.sub用空白字符类:

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

可以使用发电机表达all内置功能:

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

但请注意,i.isspace()将检查字符是一个空白,如果你举ST希望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 '[email protected]') 
False 
+0

,但它'teststring'返回true,我认为op想要返回false。 – 2015-04-05 06:50:00

+0

@AvinashRaj嗯,我不这么认为,因为我不能看到这样的事情,任何方式,我需要等待OP的回应! – Kasramvd 2015-04-05 06:52:22

+0

@helpplease欢迎!;) – Kasramvd 2015-04-05 07:15:56

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 
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 ]+$', '[email protected]') 
>>> 
相关问题