2011-03-08 107 views
4

我想搜索並匹配文本文件中的特定單詞。如何使用python匹配文本文件中的單詞?

with open('wordlist.txt', 'r') as searchfile: 
     for line in searchfile: 
      if word in line: 
        print line 

此代碼返回包含目標單詞的子字符串的單詞。例如,如果單詞是「there」,那麼搜索將返回「there」,「因此」,「由此」等。

我希望代碼僅返回包含「there」的行。期。

回答

5

分割線成標記:if word in line.split():

+0

可能是與正則表達式相比更高效的解決方案,但它可能會在角落案例中破裂(我不能肯定地說,因爲我不知道輸入是什麼樣子)。爲簡單起見+1。 – 2011-03-08 04:53:50

+0

嘿謝謝@jcomeau_ictx。它的工作:) – Apps 2011-03-08 06:08:48

+0

不客氣。但正如其他人所說,學習正則表達式。它需要一段時間,但它是值得的。 * pydoc re * – 2011-03-08 06:12:16

5
import re 

file = open('wordlist.txt', 'r') 

for line in file.readlines(): 
    if re.search('^there$', line, re.I): 
     print line 

re.search函數掃描串line,如果找到在第一參數中定義的正則表達式,忽略大小寫與re.I返回true。 ^字符表示'開始行',而$字符表示'行結束'。因此,搜索功能只會返回真,如果它匹配那裏前面有一行的開始,然後跟着行的結尾,也就是說它本身是孤立的。

+0

對代碼的一些解釋很好,因爲很明顯OP不熟悉正則表達式概念。 – Velociraptors 2011-03-08 04:54:20

+0

不會有這個問題嗎?也許'^ *那裏* $'會更好? – schwiz 2011-03-08 04:56:21

+0

很難匹配所有的角落案例,沒有任何指示輸入的樣子。 '\ bthere \ b'可能比'^ there $'好。 – Velociraptors 2011-03-08 04:58:33

0

查看re模塊(正則表達式)。用regex'there'重新搜索就是你想要的。

1

您可以隨時使用正則表達式,東西線沿線的:

import re 

with open('wordlist.txt', 'r') as searchfile: 
     for line in searchfile: 
      if re.search(r'\sthere\s', line, re.M|re.I): 
        print line 
  • \sthere\s - 其次是 '有',隨後的任何空間
  • re.I任何空間 - 指不區分大小寫
  • re.M - 在這種情況下並不重要(因爲行只有1 \ n)
+0

類似r'\ bthere \ b'會更好。 '\ b'匹配一個字邊界而不消耗像'\ s'這樣的字符。 – whjou 2011-03-08 05:06:19

相關問題