2014-01-22 21 views
0

我正在寫一個腳本,它在文件中找到幾行文本。 我不知道如何用其他給定的(新的字符串可能會更短或更長)完全替換文本。我使用re.compile()創建多線條圖案,然後尋找一個文件中的任何比賽我這樣做:Python - 替換文件中的多行字符串

for match in pattern.finditer(text_in_file) 
    #if it would be possible I wish to change 
    #text in a file here by (probably) replacing match.group(0) 

是否有可能以這種方式來完成(如果是,那該怎麼辦呢)或者我的做法是錯誤的或者很難做到正確(如果是的話,那麼該怎麼做對嗎?)

+1

使用're.sub'而不是're.finditer'。 –

回答

1

簡單的解決方案:

  1. 閱讀全文進入一個變量爲一個字符串。
  2. 使用多行正則表達式匹配要替換
  3. 用什麼output = pattern.sub('replacement', fileContent)

複雜的解決方案:

  1. 逐行讀取文件中的行
  2. 打印任何線,與圖案的起始位置不匹配
  3. 如果找到匹配的起始位置,請停止打印,直至看到結束圖案。
  4. 如果看到了結束格式,請打印替換文件
+2

代碼示例將大大改善此答案。 – rjurney

+1

也許代碼示例只能給出清晰度。 –

1

使用pattern.sub('replacement text', text_in_file)來替換匹配。

根據需要,您可以在替換模式中使用反向引用。如果字符串更短或更長,這並不重要;該方法會返回一個新的字符串值,並進行替換。如果文本來自文件,則需要將文本寫回該文件以替換內容。

如果您需要在原地進行更換,您可以使用fileinput module;該模塊負責將原始文件移到一邊,並在其中寫入一個新文件。