Python re.match问题

时间:2012-09-25 02:06:27

标签: python regex

这是我的代码看起来像......

if re.match('[a-z]',usrInput):
    run onlyLetters function
elif re.match('[0-9]',usrInput):
    run onlyNumbers function
elif re.match('[a-z0-9]',usrInput):
    run lettersAndNums function

问题是,如果我输入'2394jsdkfjsdkm'这样的文本,它将只读取字符,因为它满足if语句中的第一个条件。我真的希望像这样的输入是lettersAndNums。我如何更改代码?

2 个答案:

答案 0 :(得分:3)

如果您只想查看字符串是否全部是数字,字母或字母数字:

if usrInput.isalpha():
    # all letters
elif usrInput.isdigit():
    # all numbers
elif usrInput.isalnum():
    # all letters or numbers

请注意,这允许使用大写和小写字母;如果您只想要小写字母,请添加and usrInput.islower()

答案 1 :(得分:1)

您的代码仅检查第一个字符是否与模式匹配。如果您想确保 all 字符串中的字符与模式匹配,请使用[pattern]*$,如下所示:

if re.match('[a-z]*$',usrInput):
    run onlyLetters function
elif re.match('[0-9]*$',usrInput):
    run onlyNumbers function
elif re.match('[a-z0-9]*$',usrInput):
    run lettersAndNums function

这是因为*表示“任意数量的字符”,而$表示“字符串的结尾。”