2017-01-30 37 views
0

這裏是我的代碼...我的正則表達式是不是在蟒蛇得到精確匹配

import re 

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"] 
for i in l: 
    matchobj=re.match(r'chap[0-9]',i,re.M|re.I) 
    if matchobj: 
     print(i) 

正如我剛纔提到的第一章[0-9] ..所以應該只有這些字符串隨後後只有一個整數第一章

所以我應該得到下面的輸出..

chap3中 chap2的 把chap4

,但我得到了followi NG輸出... chap11 chap3中 chap2的 把chap4 chap55 chap33 chap54

+2

添加字邊界'章[0-9] \ B' – revo

回答

3

match你的模式在字符串開始處匹配。追加例如串'$'或單詞邊界'\b'末到您的模式:

matchobj=re.match(r'chap\d$',i,re.M|re.I) 
# \d (digit) is shortcut for [0-9] 

docsre.match

如果在字符串開頭的零個或多個字符匹配正則表達式模式,返回相應的MatchObject實例。

+0

可以使用'\ D'簡化號範圍。 – Niitaku

+0

@Niitaku我加了這個,因爲它縮短了模式,通常沒有語義上的差異。然而,'\ d'可以匹配比'[0-9]' – schwobaseggl

1

您應該在您的正則表達式表達式的末尾添加美元符號。美元($)表示字符串的結尾,爲了將來參考,克拉(^)表示開始。

import re 

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"] 
for i in l: 
    matchobj=re.match(r'chap[0-9]$',i,re.M|re.I) 
    if matchobj: 
     print(i) 

輸出

chap3 
chap2 
chap4 
+0

更多的字符但是它應該只在匹配之後匹配1個整數...在這裏爲什麼它不是? –