2015-11-18 145 views
1

我試圖找出是否有一個簡單的方法使用for循環和列表來檢查用戶輸入字符串是否包含字母或字母和撇號,但不包括數字或字母和數字(字母和數字以及撇號)?如何檢查一個字符串是否包含字母或字母和撇號,但沒有數字?

我試過很多方法,似乎無法弄清楚它?我會很感激任何線索!謝謝。

+3

正則表達式是關鍵字。 – karakfa

+0

有沒有辦法做到這一點,沒有正則表達式? – kssan

+0

不清楚你正在尋找什麼。聽起來你只想要沒有數字的字符串,這是否正確? –

回答

2

您似乎只想包含字母的字符串(加上也許是一個撇號),但沒有數字,儘管您已經更詳細地表達了要求。這可以在不正規表達式如下完成:

not any(c for c in my_str if c not in string.ascii_letters + "'") 

請參見下面的示例代碼:

>>> test = ['abcde', "abcde'", 'abcde123', "abcde'123", 'abcde.'] 
>>> for s in test: 
... print(s, '-->', not any(c for c in s if c not in string.ascii_letters + "'")) 
... 
abcde --> True 
abcde' --> True 
abcde123 --> False 
abcde'123 --> False 
abcde. --> False 

希望這是顯而易見的,這將是更有效地做string.ascii_letters + "'"只有一次,那你必須import string第一。這只是一個例子。

+1

非常感謝你! – kssan

1

您還可以使用set.issuperset指定一組允許的字符:

from string import ascii_letters 
allowed = set(ascii_letters+"'") 
test = ['abcde', "abcde'", 'abcde123', "abcde'123", 'abcde.'] 
for s in test: 
    print("{} {}".format(s, allowed.issuperset(s))) 

輸出:

abcde True 
abcde' True 
abcde123 False 
abcde'123 False 
abcde. False 
相關問題