2011-06-01 35 views
2

我有一段代碼,我需要從多個文件中刪除啓動這樣的:爲什麼我的正則表達式不能處理來自file.read()的輸入?

<?php 
//{{56541616 

結束這樣的:

//}}18420732 
?> 

其中數字是兩個字符串可以是任何序列字母和數字(不一樣)。

我寫了一個Python程序,將返回整個輸入字符串,除了這個問題字符串:

def removeInsert(text): 
    m = re.search(r"<\?php\n\/\/\{\{[a-zA-Z0-9]{8}.*\/\/\}\}[a-zA-Z0-9]{8}\n\?>", text, re.DOTALL) 
    return text[:m.start()] + text[m.end():] 

這個程序的偉大工程,當我把它與removeInsert(「」「[文件文本]」「」 ) - 三重引號允許將它讀入多行。

我試圖擴展這個打開一個文件,並將該文件的字符串內容到removeInsert()與此:

def fileRW(filename): 
    input_file = open(filename, 'r') 
    text = input_file.read() 
    newText = removeInsert(text) 
    ... 

然而,當我運行fileRW([輸入文件]),I得到這個錯誤:

return text[:m.start()] + text[m.end():] 
AttributeError: 'NoneType' object has no attribute 'start' 

我可以證實,「文本」在這最後的代碼實際上是一個字符串,確實包含問題代碼,但它似乎removeInsert()的代碼不會對這個字符串工作。我最好的猜測是它與我在手動輸入字符串到removeInsert()時執行的三重引用有關。也許fileRW傳遞給removeInsert()的文本不是三引號的(我試過用不同的方法強制它有三重引號(「\」\「\」「加),但那是行不通的) 。我不知道如何解決這個問題,但在我的谷歌搜索中找不到任何有關它的信息。任何建議?

回答

1

你的正則表達式只使用\n作爲行,你的文本編輯器可能會插入一個回車和換行符組合:\r\n嘗試在你的正則表達式改變\n(\r\n|\r|\n)

+0

謝謝!這解決了它。我以爲可能會出現換行問題,但不能提出它的樣子。 – Kristen 2011-06-01 01:02:50

0

保持在你的正則表達式\n並打開文件:

input_file= open(filename, 'rU') 

注意模式中的extra U。這將使您的代碼即使在其他操作系統上使用,或給定具有「外部」行尾的文件時也能正常工作。

相關問題