2014-04-08 101 views
1

爲什麼下面的正則表達式不打印真?Python正則表達式來捕捉單個字符字母

print re.compile(r'^\b[a-z]\b$').search('(s)') 

我想要匹配,可能有非字母數字字符之前和之後,但沒有任何更多的字母數字字符的字符串中的任何單個字符alphabeticals。所以下面應該是匹配:

'b' 
'b)' 
'(b)' 
'b, 

,並應進行以下失誤:

'b(s)' 
'blah(b)' 
'bb)' 
'b-b' 
'bb' 

的解決方案here不起作用。

+1

這裏有什麼問題?它不工作了嗎? – devnull

+0

對不起devnull,我有錯誤的輸入字符串。現在檢查它,它不起作用。 – user2104778

+2

你的意思是什麼不起作用?你正在放置錨點以確保輸入是1個字符,它如何匹配更大的字符串? – devnull

回答

0

確定這裏就是答案:

print re.compile(^[(,\[]?[a-z][),;\]]?[,;]?$).search('(s)') 

它捕獲各種單字符字母數字複雜的圖案。我意識到這與我所要求的不同,但實際上它效果更好。

2

^在開始時和在$,最終導致如果整個字符串爲單個字符,表達僅匹配。 (因此,它們使每個\b過時。)取出錨以匹配較大的字符串內:

print re.compile(r'\b[a-z]\b').search('b(s)') 

或者,確保只有一個字符像:

print re.compile(r'^\W*[a-z]\W*$').match('b(s)') 

。注意,在第一種情況下,'b-b''blah(b)'將匹配,因爲它們包含單個字母字符而不接觸其中的其他人。在第二種情況下,'b(s)'將不會匹配,因爲它包含兩個字母字符,但其他四種情況將正確匹配,並且所有不匹配的情況都會按預期返回無(錯誤的邏輯值)。

+0

我很抱歉,但我意識到我問了與我想要的相反的東西。我不想匹配'b(s)',但我想匹配'(s)'。查看更新的問題。 – user2104778

相關問題