2017-05-01 84 views
0
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:]只應該增加時,爲什麼搜索會向後跳轉?

爲什麼pattern和m在pdb中不顯示?

+0

您將上下文定義爲可選的子字符串。至少可以嘗試設置字邊界,嘗試'r'\ b'+ str(chapter)+ r'\ b'' –

回答

0

我是個白癡。 re.search(text [i:])從0而不是0返回m.start()

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