正则表达式匹配每个比特流而没有5个跟随字符

时间:2016-02-04 18:53:15

标签: regex

我需要一个匹配每个比特流的正则表达式,其中没有5个跟随比特出现。 例如:

010001111 -> matches
010011111 -> does not match

我能够创建一个可以除以5的长度的正则表达式。

((0|1){4}(?!\2)(0|1))+

有没有办法在没有5的倍数的情况下做到这一点?

2 个答案:

答案 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