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

2024-10-01 02:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

为了解决python中列出的here问题,我想我应该尝试一个漂亮的小regex来捕获最大的“二进制间隙”(数字的二进制表示中的零链)。在

我为该问题编写的函数如下:

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

而且效果很好。然而。。。由于某些原因,它与1000001000000000166561的二进制表示)中的第二组零不匹配。9个零没有出现在匹配列表中,所以这一定是正则表达式有问题-但是我看不到它在哪里,因为它与其他给出的示例都匹配!在


Tags: 函数lenheredef二进制数字elementmax
1条回答
网友
1楼 · 发布于 2024-10-01 02:35:33

同一位不能包含在两个匹配中。正则表达式匹配1,后跟一个或多个0,并以另一个1结尾。一旦找到第一个匹配项,您将留下0000000001,它不是以1开头的,因此与正则表达式不匹配。在

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

相关问题 更多 >