2012-08-22 27 views
6

我注意到Python的正則表達式庫中的一些奇怪的行爲,我不知道如果我做錯了什麼。Python正則表達式中的錯誤? (re.sub與re.MULTILINE)

如果我運行一個正則表達式使用re.sub(),re.MULTILINE。它似乎只能取代前幾次發生的事件。如果我關閉re.MULTILINE,使用re.subn(..., count = 0, flags = re.MULTILINE)或使用re.compile(..., re.MULTILINE)編譯正則表達式,它將取代所有發生的事件。

我在Ubuntu 12.04上運行Python 2.7。

我已在隨機例如:

  • Pastebin.com - 輸出從終端
  • codepad - 腳本,確認行爲(除了re.subn(),它是不同上2.5)

有人可以確認/否認他們的機器上的這種行爲?

編輯:實現我應該繼續前進,並將其發佈在Python bug跟蹤器上。的

re.sub(pattern, replace, text, flags=re.MULTILINE) 

代替

re.sub(pattern, replace, text, re.MULTILINE) 

這相當於

re.sub(pattern, replace, text, count=re.MULTILINE) 

這是在你的代碼中的錯誤http://bugs.python.org/msg168909

回答

16

用途: 編輯2:問題的報道。

請參閱re.sub()

+0

啊,好吧,這就解釋了哈哈。我已經解決了這個問題。謝謝! – eacousineau

+0

我使用're.I'沒有'flags ='很長一段時間,並不知道這一點。 Docs不會警告您這種我認爲是嚴重錯誤的行爲。我什至不記得看到任何人明確使用'flags'和'count'。 – minerals

+0

@礦物質:如果你點擊答案中的鏈接;你應該看到're.sub(pattern,repl,string,count = 0,flags = 0)'函數簽名,文檔解釋了'count'參數的含義。 – jfs