2017-05-01 11 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:]を増やすだけで検索が逆にジャンプするのはなぜですか?

なぜパターンとmがpdbに表示されないのですか?

+0

コンテキストをオプションの部分文字列として定義しました。少なくとも単語境界を設定してみてください。 'r '\ b' + str(chapter)+ r '\ b'' –

答えて

0

私はばかです。 re.search(text [i:])は、iの代わりに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