2016-12-22 73 views
0

我寫了一個腳本來打印包含聖經的txt文件中的特定單詞的行。問題是我無法用行來得到確切的單詞,而是它打印單詞的所有變體。Python搜索文件的特定字和查找精確匹配並打印行

例如,如果我搜索「am」,它會打印含有「lame」,「name」等詞語的句子。 而不是我希望它僅打印帶有「am」的句子

即「我是你的救星」 「我在這裏」等

這裏是我使用的代碼:

import re 
text = raw_input("enter text to be searched:") 

shakes = open("bible.txt", "r") 

for line in shakes: 
    if re.match('(.+)' +text+ '(.+)', line): 
     print line 

回答

0

我想,如果你在外面字符串text,把空間是這樣的:

'(.+) ' + text + ' (.+)' 

釷如果我正確理解代碼中發生了什麼,那麼就會做伎倆。

+0

感謝SparklePony它的工作 – jerink

+0

謝謝SparklePony它的工作。我是一個新手,剛開始。你能解釋一下這段代碼有什麼不同。 – jerink

+0

這段代碼的區別在於它搜索帶有單詞「am」的句子,它們周圍有空格。如果仔細觀察「text」周圍的字符串,則會添加空格,所以基本上可以避免發現「火腿」,因爲前面沒有空格。我希望這個答案是有道理的。 –

1

這是完成您的任務所需的另一種方法,雖然它不會非常符合您當前的方法,但可能會有所幫助。

的test.txt文件我作爲輸入有四句話:

This is a special cat. And this is a special dog. That's an average cat. But better than that loud dog. 

當你運行程序,包括文本文件。在命令行中,這會是這個樣子:

python file.py test.txt 

這是伴隨file.py:

import fileinput 

key = raw_input("Please enter the word you with to search for: ") 
#print "You've selected: ", key, " as you're key-word." 

with open('test.txt') as f: 
    content = str(f.readlines()) 

#print "This is the CONTENT", content 

list_of_sentences = content.split(".") 
for sentence in list_of_sentences: 
    words = sentence.split(" ") 
    for word in words: 
     if word == key: 
      print sentence 

關鍵字 「貓」,這將返回:

That is a special cat 
That's an average cat 

(請注意,期間不再存在)。

+0

我如何給txt文件「聖經」。txt「作爲輸入,並將raw_input變量分配給key.Thanks – jerink

+0

有幾種方法可以實現,例如,可以一行一行或一次獲取所有內容,該版本可以一次獲取所有內容。上面的例子顯示了這個。 –

0

re.findall可能在這種情況下是有用的:

print re.findall(r"([^.]*?" + text + "[^.]*\.)", shakes.read()) 

甚至沒有正則表達式:

print [sentence + '.' for sentence in shakes.split('.') if text in sentence] 

讀取該文本文件:

I am your saviour. Here I am. Another sentence. 
Second line. 
Last line. One more sentence. I am done. 

均可以得到相同的結果:

['I am your saviour.', ' Here I am.', ' I am done.'] 
+0

感謝您的幫助,但發生錯誤「Type error:Expected string or buffer」「Return _compile(pattern,flags).findall(strings)」 – jerink