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“作为关键字,则循环运行,他们必须再次输入关键字;同样适用于”1234 as“,但是如果他们输入"abcd1234”,即使它包含数字,循环也不会运行。
发布于 2015-12-23 10:55:41
re.match从一开始就匹配,但是如果匹配直到文本结束也会返回匹配。因此,在示例输入abcd1234中,正则表达式与abcd部件匹配。因此,循环停止(找到匹配项)。
更改regex,使其匹配,直到文本结束,您的问题将得到解决。试试下面的代码:
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 ]都可以匹配。
发布于 2015-12-23 10:52:17
因为re.match从一开始就尝试匹配,而且regex [a-z ]也匹配了一个字符,即第一个字符,而不关心剩余的字符。
while not(re.match('[a-z ]+$',keyword)):
keyword = raw_input("enter a keyword:-").lower()https://stackoverflow.com/questions/34433959
复制相似问题