Python 正则表达式查找不起作用的空间

Python 正则表达式查找不起作用的空间,python,regex,python-3.x,Python,Regex,Python 3.x,我试图只让用户输入字母表中的字符,不包括空格。我使用一个正则表达式查找字母(r'[a-zA-Z]+'),另一个查找空格('\s+')或('+'),然后使用while语句检查它: # regex rules alphabet_regex = re.compile(r'[a-zA-Z]+') space_regex = re.compile('\s+') key = str(input("1) Insert your keyword generate the number: ")) while

我试图只让用户输入字母表中的字符,不包括空格。我使用一个正则表达式查找字母(r'[a-zA-Z]+'),另一个查找空格('\s+')或('+'),然后使用while语句检查它:

# regex rules
alphabet_regex = re.compile(r'[a-zA-Z]+')
space_regex = re.compile('\s+')

key = str(input("1) Insert your keyword generate the number: "))

while not alphabet_regex.match(key) and not space_regex.match(key):
    error(keywordError)
    key = str(input("1) Insert your keyword to generate the number: "))
字母查找器工作得很好,但空格却不行。你可以把它放在任何你想放的地方,它会忽略它


你能帮我吗?谢谢

re.match
从一开始就匹配,即它与使用
re.search(r'^…')
相同。所以,在你的字母匹配中,它从一开始就匹配,大概你得到了想要的结果。在空白的情况下,如果输入字符串的开头没有空白,它将不匹配

因此,您可以对正则表达式使用
re.search

space_regex = re.compile('\s')
如果您坚持使用
re.match

space_regex = re.compile('.*\s')

还要注意的是,在这里匹配一个空格就可以了,您不需要使用
+
量词匹配一个或多个空格


编辑:

看看你的计划,你可以用一个简单得多的正则表达式达到同样的效果——只检查起始和结束正确锚定的字母:

^[A-Za-z]+$

match
意味着从第一个字符开始,你可能想要
。搜索(…)
。你做得很艰难。你应该把负数放在一个正则表达式中。
在重新搜索时(r'(?i)[^a-z\s],key):
负数类中的每一个东西都是和的,所以不是a-z也不是\sthanks Willem我没有注意到!设置逻辑的方式(切换到
搜索后
)将允许使用字母字符和空格。这就是你想要的吗?因为它是一个白名单,如果您只想允许字母字符,那么这就是您需要检查的全部内容。非常感谢您提醒我匹配和搜索,但在尝试('\s')后,它仍然无法工作。也许我还缺少什么?@b0ss192301我不明白为什么它不应该工作。看看你是否把所有的逻辑都整理好了。如果有疑问,请给我举一些例子。当你输入“test”或“t”时,你可以在这里看到它,并且两者都会work@b0ss192301您有一个逻辑错误,您需要
而不是字母搜索(key)或空格搜索(key):