2015-11-21 35 views
0

我有一段文本要清理。問題是新線太多了。當我使用text=open(file, 'r')text=text.read()打開文本時,我看到很多很難清理的新行。我想刪除整個以下文本。我們使用re.sub刪除它們。因爲有太多的新行,我需要11行re.sub命令。更糟糕的是,How,Working,YouBriefing過於籠統,所以即使我不想擦除它們,它們也可以從體內移除。我可以使用re.sub命令like,清理(Re.sub)當文本中有太多的python新行時

remove1 = 'How' 
remove2 = 'Can I Help' 
remove3 = 'in Touch' 
remove4 = 'Working' 
remove5 = 'Briefing' 
remove6 = 'Room' 
remove7 = 'Meeting' 
remove8 = 'You' 
remove9 = 'F.A.Q' 

text = re.sub(quant1, '', text) 
text = re.sub(quant2,'', text) 
text = re.sub(quant3, '', text) 
text = re.sub(quant4, '', text) 
text = re.sub(quant5, '', text) 
text = re.sub(quant6, '', text) 
text = re.sub(quant7, '', text) 
text = re.sub(quant8, '', text) 
text = re.sub(quant9, '', text) 

有沒有更好的方法來清除它?我不想一條一條地做。我想一次刪除兩行How Can I Help?。我不想包含像How這樣的一般詞。

如果我使用text.readlines(),結果如下所示。

'\tHow\r\n', 'Can I Help?\r\n', ' \t Keep \r\n', 'in Touch\r\n', ' \t Working \r\n', 
'for You\r\n', ' \t Briefing \r\n', 'Room\r\n', ' \t Meeting \r\n', 'You\r\n', ' \t F.A.Q.\r\n' 

回答

1

您可以使用|,從文檔:

'|'

A | B,其中A和B可以是任意的RE,創建一個正則表達式匹配A或B.

任意數量的RE可以用'|'分開通過這種方式。這可以在組內使用(見下文)。

當目標字符串被掃描時,由'|'分隔的RE從左到右嘗試。當一個模式完全匹配時,該分支被接受。

這意味着一旦A匹配,B將不會被進一步測試,即使它會產生更長的整體匹配。換句話說,'|'操作員從不貪婪。

要匹配文字'|',請使用\|,或將其包含在字符類中,如[|]

因此,作爲文件說,|比賽foo|barfoo,我們可以簡單地使用bar得到'|'.join(['foo', 'bar'])

所以,你可以嘗試:

text = re.sub('|'.join([remove1, remove2, remove3, remove4, remove5, remove6 
, remove7, remove8, remove9]), '', text) 
+0

謝謝! '''''是一個很好的解決方案。但問題是當我做''''.join(['How','我能幫忙'))',那麼我的文檔中的每個'How'都將被刪除。我只想擦除下一行有'我可以幫助'的'How'。我只展示了我的文字的一部分。在我的文章中,我有一堆我不想刪除的「怎樣」。我試過''&',但它不起作用。 – user3077008

+0

@ user3077008:嗯...那麼怎麼樣使用'怎樣(?= \ s +我可以幫忙嗎?)'而不是? –