解析目录

时间:2017-05-01 18:23:46

标签: python regex python-3.x

def table_of_contents(text):
    i = 0
    toc = []
    for chapter in range(1,60):
        pattern = re.compile(r'(\S+ )?(' + str(chapter) + ')( \S+)?', re.I)
        m = pattern.search(text[i:])
        if m is not None:
            toc.append(m.start())
            i = m.start()
        else:
            break
    return toc

即使我认为应该这样做,这个功能也没有做我想要的。我试过调试它,但似乎对pdb不透明。问题是toc应该严格提升,但是,我得到像

这样的结果
toc = [513, 435, 378, 486, 650, 789, 942]

发生了什么事?

为什么在文本[i:]应该只增加时搜索会向后跳?

为什么不在pdb中显示模式和m?

1 个答案:

答案 0 :(得分:0)

我是个白痴。 re.search(text [i:])从0返回m.start()而不是i

def table_of_contents(text):
    i = 0
    toc = []
    for chapter in range(1,60):
        pattern = re.compile(r'(\S+ )?(' + str(chapter) + ')( \S+)?', re.I)
        m = pattern.search(text[i:])
        if m is not None:
            toc.append(m.start() + i)
            i += m.start()
    else:
        break
return toc