我需要一个匹配每个比特流的正则表达式,其中没有5个跟随比特出现。 例如:
010001111 -> matches
010011111 -> does not match
我能够创建一个可以除以5的长度的正则表达式。
((0|1){4}(?!\2)(0|1))+
有没有办法在没有5的倍数的情况下做到这一点?
答案 0 :(得分:1)
如果您将数据作为文本内容,并且位块用空格分割,则可以使用
\b(?![01]*([01])\1{4})[01]+\b
仅匹配末尾不包含5个相同位的那些。
请参阅regex demo
<强>解释强>:
\b
- 领先的字边界(?![01]*([01])\1{4})
- 如果在零个或多个或者两个之后有任何5个零或一个,那么一个未通过匹配的否定前瞻[01]+
- 一个或多个零或一个\b
- 尾随字边界用于测试独立位块:
^(?![01]*([01])\1{4})[01]+$
请参阅another demo
答案 1 :(得分:0)
您可以匹配该位,并计算其出现次数:
>>> len(re.findall('(?=(1))', '010001111'))
5
>>> len(re.findall('(?=(1))', '010011111'))
6
>>> len(re.findall('(?=(1))', '010110111'))
6