匹配

2012-02-02 63 views
0

我試圖尋找由空格這樣的分離二進制數字序列的正則表達式組:匹配

>>> seq = '0 1 1 1 0 0 1 0' 

所以,我創建了正則表達式:

>>> pat = r'(\b[01]\b)+' 

但下面的搜索只返回一個數字:

>>> re.search(pat, seq).group(0) 
'0' 

怎麼了?

回答

0

你目前的正則表達式無法匹配空格,所以它只能匹配單個字符。你可以使用與re.findall()相同的正則表達式來獲得字符串中的所有匹配項,或者修改你的正則表達式,這樣即使它遇到空格也會繼續匹配。

下面是一個例子使用re.findall()

>>> re.findall(r'(\b[01]\b)+', '0 1 1 1 0 0 1 0') 
['0', '1', '1', '1', '0', '0', '1', '0'] 

或者通過改變正則表達式(\b[01]\b\s?)+你可以在一場比賽中的整個序列:

>>> re.search(r'(\b[01]\b\s?)+', '0 1 1 1 0 0 1 0').group(0) 
'0 1 1 1 0 0 1 0' 
+0

感謝您的解釋。現在我明白了爲什麼。 \ b匹配一個單詞邊界處的空字符串,但它與空格不匹配,所以我需要在匹配單詞後拼出一個\ s。 – 2012-02-03 06:04:30

2

你很近,只是缺少模式中的空間。請嘗試pat = r'\b([01])*[01]\b'

>>> import re 
>>> seq = '0 1 1 1 0 0 1 0' 
>>> pat = r'\b([01])*[01]\b' 
>>> re.search(pat, seq).group(0) 
'0 1 1 1 0 0 1 0' 
>>> re.search(pat, 'spam and 0 0 0 1 0eggs').group(0) 
'0 0 0 1'