2008-09-03 67 views
39

Python的文件說:Python的應用re.sub具有標誌不全部替換

re.MULTILINE:當指定的模式字符「^」在字符串的開頭,並在比賽開始(緊接在每一個換行符之後)...默認情況下,'^'僅匹配字符串的開始處...

那麼接到以下意外結果時發生了什麼?

>>> import re 
>>> s = """// The quick brown fox. 
... // Jumped over the lazy dog.""" 
>>> re.sub('^//', '', s, re.MULTILINE) 
' The quick brown fox.\n// Jumped over the lazy dog.' 

回答

93

看的re.sub定義:

sub(pattern, repl, string[, count]) 

的第四個參數是計數,你正在使用re.MULTILINE(這是8)作爲計數,而不是作爲一個標誌。

你必須編譯正則表達式,如果你想使用標誌。

re.sub(re.compile('^//', re.MULTILINE), '', s) 

一個flags論點是在Python 2.7增加,所以完整的定義是現在:

re.sub(pattern, repl, string[, count, flags]) 

這意味着:

re.sub('^//', '', s, flags=re.MULTILINE) 

作品。

+6

倒不如有`re.compile(「^ //」,re.M被).SUB(「」,S)` – SilentGhost 2010-03-25 16:32:25

+0

你沒有,如果你告訴蟒蛇,你是標誌編譯通過它 – pseudosudo 2011-08-30 18:34:12

8
re.sub('(?m)^//', '', s) 
5

re.sub完整定義是:

re.sub(pattern, repl, string[, count, flags]) 

這意味着,如果你告訴Python的參數是什麼,那麼你可以傳遞flags不經過count

re.sub('^//', '', s, flags=re.MULTILINE) 

或,更簡潔:

re.sub('^//', '', s, flags=re.M)