我正在尝试搜索由空格分隔的二进制数字序列,如下所示:
>>> seq = '0 1 1 1 0 0 1 0'
所以,我创建了正则表达式:
>>> pat = r'(\b[01]\b)+'
但是在搜索后只返回一位数字:
>>> re.search(pat, seq).group(0)
'0'
怎么了?
答案 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'