0

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

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

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

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

但以下搜索仅返回一位数字:

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

怎么了?

4

2 回答 2

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'
于 2012-02-02T23:51:57.670 回答
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'
于 2012-02-02T23:51:05.803 回答