匹配

2012-02-02 61 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'