0

这是我的代码的样子......

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',它将读取为 onlyLetters,因为它满足 if 语句中的第一个条件。我真的希望这样的输入是字母和数字。我需要如何更改代码?

4

2 回答 2

3

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

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

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

于 2012-09-25T02:12:49.970 回答
1

您的代码仅检查第一个字符是否与模式匹配。如果要确保字符串中的所有字符都与模式匹配,请使用[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

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

于 2012-09-25T02:09:19.233 回答