2017-05-17 34 views
0

我有很多行這樣的行(請滾動閱讀整行):正則表達式替換用多個標籤行文本,如果這個詞是在蟒蛇外部txt文件

<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp; 3 Point Updated<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp; Shape Removed 4<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp; Point 3 Added<br> 

我需要從刪除每行從
....點....
其中這些標籤會發現在外部的txt文件中列出裏面的話(例如像單詞「點」)

我的代碼現在是begining:

with open(input.txt') as input: 
    lines=input.readlines() 
    with open(output.txt', "w") as output: 
     for line in lines: 
      if "Point" in line: 
       output.write(re.sub('(<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp;.*?)Point(.*?<br>)', '<br>', line, flags=re.DOTALL)) 
      else: 
       output.write(line) 

時使用此代碼IM它唯一的一次刪除,如果發現「點」線和葉:

<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp; Shape Removed 4<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp; Point 3 Added<br> 

如何使更換點字的
標籤之間的多重實例?

第二個問題:現在我只使用if "Point" in line,但是如果它搜索從外部txt文件加載的話將會很好。 感謝您的幫助!

+0

我應該writee在beggining:我需要從每一行從
....點begining刪除....
這些標籤裏面哪裏會發現在外部的txt文件中列出的話(例如像字「Point」) – Lucas

+0

請提供一個示例,說明**代碼正確時應該顯示的內容**。此外,您可以編輯自己的問題,而不是在評論中提供其他信息。 – Darkstarone

回答

1

我相信這是你想要的結果,讓我知道,如果需要修改:

bad_words = [] 
with open('bad_words.txt', 'r') as f: 
    for line in f: 
     bad_words.append(line.rstrip()) 

with open('input.txt', 'r') as f: 
    with open('output.txt', 'w') as output: 
     for line in f: 
      kept_parts = [] 
      for chunk in line.split("<br>"): 
       if all(bad_word not in chunk for bad_word in bad_words) : 
        kept_parts.append(chunk) 

      line = "<br>".join(kept_parts) 

      output.write(line + "\n") 

結果:

<br>&emsp;&emsp;<font size="4">&bull;</font>&emsp; Shape Removed 4<br> 

在本質上,你不需要正則表達式。只需將代碼分成幾行(<br>表示一行);忽略任何包含不需要的文本的塊;並重新加入結果列表。

+0

謝謝Darkstarone。這工作。我沒想過使用line.split。謝謝。如果我在外部txt文件中有另外一個字,例如一個在另一個之下,我應該如何循環以查找其他字以及替換它們? – Lucas

+0

那麼,你想要替換所有單詞的文本文件與'input.txt''分開嗎?還是它的一部分? – Darkstarone

+0

其不同的txt文件 – Lucas