2012-09-25 56 views
0

這裏是我的代碼看起來像......Python的re.match問題

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聲明。我真的很喜歡這樣的輸入是lettersAndNums。我如何修改代碼?

+0

建議您閱讀手冊。它有很多很好的例子可以幫助你解決這個(簡單的)問題。 http://docs.python.org/library/re.html#regular-expression-syntax –

回答

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 

這是因爲*意味着「任何數量的字符,」和$意味着「結束的字符串。「

+0

這些模式將匹配一個空字符串。我認爲最好使用'*'的'+'insead。 –

3

如果你只是想看看一個字符串是否是所有的數字,字母或字母數字:

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

注意,這允許大寫和小寫字母;如果你只想要小寫字母加and usrInput.islower()