2015-04-05 226 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]') 
>>> 
相關問題