2017-02-13 81 views
0

這通常是沒有硬性任務,但今天我似乎無法除去簡單的JavaScript代碼..Python的 - 刪除HTML標籤用正則表達式

我的工作的例子(格式化)

<section class="realestate oca"></section> 
<script type="text/javascript" data-type="ad"> 
    window.addEventListener('DOMContentLoaded', function(){ 
     window.postscribe && postscribe(document.querySelector(".realestate"), 
     '<script src="https://ocacache-front.schibsted.tech/public/dist/oca-loader/js/ocaloader.js?type=re&w=100%&h=300"><\/script>'); 
    }); 
</script> 

我與(生)工作的例子

<section class="realestate oca"></section>\n<script type="text/javascript" data-type="ad">\n\twindow.addEventListener(\'DOMContentLoaded\', function(){\n\t\twindow.postscribe && postscribe(document.querySelector(".realestate"),\n\t\t\'<script src="https://ocacache-front.schibsted.tech/public/dist/oca-loader/js/ocaloader.js?type=re&w=100%&h=300"><\\/script>\');\n\t});\n</script> 

我想從去除一切(第二行開頭)至</script>(最後一行)。這將只輸出第一行,<section..>

這裏是我的代碼行:

re.sub(r'<script[^</script>]+</script>', '', text) 
#or 
re.sub(r'<script.+?</script>', '', text) 

我清楚地失去了一些東西,但我什麼也看不見。
注意:我正在處理的文檔主要包含純文本,因此不需要使用lxml或類似語法進行解析。

+0

你應該知道這個'[^]'不意味着除了關閉腳本標記任何東西。 – revo

+0

@glibdud我同意,我只是想標記它。 http://meta.stackoverflow.com/q/343643/1561176 –

+0

我認爲你應該看看這個答案使用正則表達式來解析「HTML」http://stackoverflow.com/a/1732454/1561176。相反,你應該使用正確的解析器,比如BeautifulSoup。 https://www.crummy.com/software/BeautifulSoup/ –

回答

3

你的第一個正則表達式不起作用,因爲字符類([...])是一個字符集合,而不是字符串。所以,如果發現<script</script>由一串字符不包括分離只會匹配<任何/sc

你的第二個正則表達式是更好的,而唯一的原因它不起作用是因爲默認情況下,.通配符與換行符不匹配。要告訴它你想要它,你將需要添加DOTALL標誌:

re.sub(r'<script.+?</script>', '', text, flags=re.DOTALL) 
+0

令人驚歎。感謝您給出解釋爲什麼它不起作用! – theusual