为什么这个正则表达式与第二个二进制间隙不匹配?

时间:2016-01-26 11:43:58

标签: python regex

尝试在python中列出here列出的问题的解决方案,我想我会尝试一个不错的小正则表达式来捕获最大的二进制间隙" (数字的二进制表示中的零链)。

我为这个问题写的函数如下:

def solution(N):
    max_gap = 0
    binary_N = format(N, 'b')
    list = re.findall(r'1(0+)1', binary_N)

    for element in list:
        if len(element) > max_gap:
            max_gap = len(element)

    return max_gap

它运作良好。但是......由于某种原因,它与10000010000000001中的第二组零不匹配(66561的二进制表示)。 9个零点不会出现在匹配列表中,因此它必须是正则表达式的问题 - 但我无法看到它与给定的每个其他示例相匹配的位置!

1 个答案:

答案 0 :(得分:5)

同一位不能包含在两场比赛中。您的正则表达式与1后跟一个或多个0匹配,并以另一个1结束。找到第一个匹配后,您将离开0000000001并且不会以1开头,因此您的正则表达式不匹配。

正如@JoachimIsaksson所提到的,如果你想匹配两组0,你可以使用lookahead,以便检查最终的1,但不包括在匹配中。 r'1(0+)(?=1)'