2013-03-29 77 views
1

我有一個文本的URL看起來像這樣:Python的 - 從文本與正則表達式移除網址

<https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/reportAProblem?p 
=22000073760328&o=i> 

我用下面的模式,試圖刪除它們:

re.sub(r'\<http.+?\>', '', plain, re.S) 

但它不會讓他們所有,例如,這一次沒有得到刪除:

<http://ax.phobos.apple.com.edgesuite.net/email/images_shared/spacer_99999\r\n9.gif> 
+0

如果在分配第二個字符串之前加上r(原始字符串)('r'')或者把雙反斜槓(\\\)('')它會工作 – ton1c

+0

這很奇怪。用了一下它,它確實匹配了它:'re.match(r'。','\ n',re.S)'起作用,但是're.sub(r'。','','' \ n',re.S)'不。所以它似乎相匹配,但替換部分以某種方式失敗......真的不知道在哪裏或如何。就好像re.S不適用於're.sub'。 –

+0

是的,這是發生在我身上的事情。部分網址已被刪除,但其他網址仍保留。 – 8vius

回答

6

嘗試像這樣

p=re.compile(r'\<http.+?\>', re.DOTALL) 
re.sub(p, '', plain) 
+0

這樣做了,謝謝。小心添加一個解釋爲什麼預編譯模式有效? – 8vius

+1

其實在看了一下re.sub函數之後,我想你錯過了在flags參數前有一個額外的參數,所以像're.sub(r'\ ','',plain,flags = re。 S)'也應該工作。 – yonili

+1

@ 8vius國旗由於某種原因被錯誤地傳遞,雖然我真的不知道爲什麼。這對模式本身的標誌進行編碼。根據文檔,'re.sub'有五個參數(pattern,repl,str,count,flags),最後兩個參數是可選的。然而,當我試圖用5個參數來調用它時,它告訴我它期待着4.在Python 3中,它在我做're.sub(r'。','','\ n',0,re.S )',以及're.sub(r'。','','\ n',flags = re.S)',儘管它的文檔有說明,但它們都不適用於Python 2。 –