我无法弄清楚上面提到的问题并且感到很沮丧我应该用#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")
答案 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)
级联replace
与isalpha
:
'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')
>>>