2012-07-16 126 views
2

這是我嘗試正則表達式的字母,破折號,下劃線,數字和空間

def matcher(ex): 
    if re.match(r'^[\w|\d][A-Za-z0-9_-]+$', ex): 
     print 'yes' 

我的目標是一致只有滿足所有以下

  1. 開始只有一個字母提交或數字,並且
  2. 只允許字母,空格,短劃線,下劃線和數字數字
  3. 所有結束空格都被剝離

在我的正則表達式中,matcher('__')被認爲是有效的。我如何修改以達到我真正想要的?我相信\w還包含下劃線。但matcher('_')不匹配......

+0

'\ w'是'[0-9A-Za-z_]',你的正則表達式至少有2個字符。 – nhahtdh 2012-07-16 01:49:38

+0

@nhahtdh啊......我沒有意識到這一點。謝謝。 – user1012451 2012-07-16 01:51:43

回答

8
def matcher(ex): 
    ex = ex.rstrip() 
    if re.match(r'^[a-zA-Z0-9][ A-Za-z0-9_-]*$', ex): 
     print 'yes' 

問題在原始的正則表達式:

  1. |並不意味着在字符類交替,它意味着一個管道字符字面。

  2. 您對以下字符使用了+,表示一個或多個字符,因此像'_'這樣的單字符字符串不匹配。

  3. 您在接受下劃線的第一個字符中使用了\w

+0

...在第二個子句中需要空格 – 2012-07-16 01:49:47

+0

我添加了空格,謝謝。 – 2012-07-16 01:51:17

+0

還要剝離結束空格,只需使用'mystring.rstrip()'而不是正則表達式。 – 2012-07-16 01:51:23

相關問題