正则表达式组匹配

时间:2012-02-02 23:39:48

标签: python regex matching regex-group

我正在尝试搜索由空格分隔的二进制数字序列,如下所示:

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

所以,我创建了正则表达式:

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

但是在搜索后只返回一位数字:

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

怎么了?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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'