keyword = "*"
keyphrase = "*"
while not(re.match('[a-z ]',keyword)):
keyword = raw_input("enter a keyword:-").lower()
while not(re.match('[a-z ]',keyphrase)):
keyphrase = raw_input("enter a key phrase:-").lower()
上面的代码是我正在制作的程序的开始;但是我希望用户输入的关键字和关键短语(raw_inputs)只是字母或空格的字符,因此它们不能包含其他字符,如数字或符号。
上面的代码不能完全运行,例如,如果用户输入“1234”作为关键字,则循环运行并且必须再次输入关键字;这同样适用于“1234abcd”,但是如果它们输入“abcd1234”,即使它包含数字,循环也不会运行。
答案 0 :(得分:2)
因为re.match
尝试从头开始匹配,而且正则表达式[a-z ]
只匹配一个字符,即第一个字符,而不关心其余字符。
while not(re.match('[a-z ]+$',keyword)):
keyword = raw_input("enter a keyword:-").lower()
答案 1 :(得分:2)
re.match
从一开始就匹配,但如果匹配不是直到文本结尾,则返回匹配。因此,在您的示例输入abcd1234
中,您的正则表达式与abcd
部分匹配。因此,您的循环停止(找到匹配项)。
更改正则表达式,使其匹配到文本结尾,您的问题将得到解决。请尝试以下代码:
keyword = "*"
keyphrase = "*"
while not(re.match('[a-z ]*$',keyword)):
keyword = raw_input("enter a keyword:-").lower()
while not(re.match('[a-z ]*$',keyphrase)):
keyphrase = raw_input("enter a key phrase:-").lower()
注意$
表示正则表达式必须匹配,直到字符串结束。 *
表示可以匹配任意数量的[a-z ]
。