2017-10-13 85 views
0

這是我第一次嘗試使用Python的正則表達式,或者根本不按預期工作。我想要一個正則表達式匹配任何字母字符或下劃線作爲第一個字符,然後是任意數量的字母數字字符或下劃線。我使用的正則表達式是'^ [a-z_,AZ] [a-z_A-Z0-9] *',它似乎在pythex.org上生成我想要的,但在我的代碼中,它匹配我所做的字符串不想。Python正則表達式匹配我不想要的字符串

我的代碼如下:被匹配,我不想串

isMatch = re.match('^[a-z_A-Z][a-z_A-Z0-9]*', someString) 
return True if isMatch else False 

兩個例子是: 「QQ-Q」 和 「VA [R」。我究竟做錯了什麼?

+1

給我們展示什麼'someString'是 –

+0

那麼,前兩個字符與預期完全匹配,可以與[[a-z_A-Z]]匹配,然後匹配[a-z_A-Z0-9]。這兩個條件之後的'*'象徵着前面的語句可以重複零次或多次。該模式匹配字符串的開始部分爲有效,然後忽略其餘部分,因爲缺少結尾'$'或任何其他模式以顯示您想要在那裏結束搜索。 –

+0

如果你正在嘗試編寫一個函數來檢測一個字符串是否是一個有效的Python標識符,那麼你可以在沒有正則表達式的情況下這樣做:嘗試'str.isidentifier()'方法。 – Kevin

回答

0

我認爲你只是在你的正則表達式的末尾忘了$來指定字符串的結尾。

isMatch = re.match('^[a-z_A-Z][a-z_A-Z0-9]*$', someString) 

如果沒有,它會匹配字符串的開頭,而不是整個字符串,這可以解釋爲什麼它的工作對"qq-q""qq"匹配)和"va[r""va"匹配)。

+1

Python 3.4以上,你可以使用['re.fullmatch'](https://docs.python.org/3/library/re.html#re.fullmatch)而不是添加'^'和'$'錨 –