re.match无法在python 2.7中工作

时间:2015-12-23 10:49:24

标签: python python-2.7

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”,即使它包含数字,循环也不会运行。

2 个答案:

答案 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 ]