2012-03-11 6 views
0

私はfindlineよりも正確な検索方法が必要なリスト(words.txt)を持っています。findlineのより正確な代替方法は?

私の現在の機能(下部に表示)はfindlineを使用してリストを検索します。問題はこれです。正確な一致を返す代わりに、findlineは、それに続くマッチがあるかどうかにかかわらず、単語全体を含む最初の文字列を返します。

例:私は 'BEES'と入力し、それはサブストリング( 'BEES')を含む最初の文字列であるため、 'BAUBEES'を返します。もちろん、これは機能を完全に破壊します。

私が必要とするのは、正確に一致するように、のアルファベットをと見なす関数または(好ましくは)ビルトインメソッドです。だから、もし 'BEES'がリストにあれば(それは私があなたに保証します)、私はBEESを返すようにします。または、 'BEES'の2番目の文字が 'E'ではないため '理想的な関数'は 'BEESWAX'を返します( 'BAES'と 'BEESWAX' BAUBEES ')。

def iswholeword(word): 
    openfile = open('/media/Gianson/Python Programs/words.txt','r') 
    linz = openfile.readlines()[:] 
    openfile.close() 
    hit = findline(word,linz)[:] 
    print 'hit', hit 
    if len(hit)-1 == len(word): 
     return True 
    else: 
     return False 

答えて

1
r = re.compile(r"\b%s" % re.escape(word)) 
for line in openfile: 
    hit = r.search(line) 
    if hit: 
     # whatever 

説明:これは\b(ワード境界)から正規表現を構築し、検討中のwordは、そのファイルの各lineでそれを検索します。それはwordで始まる最初の単語を見つけ、regexp match objectを返します。

+0

申し訳ありませんが、私は馬鹿のようにfindlineの定義を残し: はデフfindline(ワード、リンツ):リンツのラインの : 行の単語場合: 戻りライン ありがとうlarsmans、私があげますそれは試して、報告バック! – laststandelectronics

+0

これを試して、次のような3つの応答を得ました:<_ sre.SRE_Match object at 0xa6151e0> – laststandelectronics

+0

def find(word、letter): index = 0 index laststandelectronics

関連する問題