[英]Regular Expression to match different script tags in python
我需要匹配不同的腳本標簽,例如這樣
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function()
{
jQuery("#gift_cards").tooltip({ effect: \'slide\'});
});
</script>
<script>dasdfsfsdf</script>
我也只需要獲取標簽和創建正則表達式的組中的src內容
(<\s*?script[\s\S]*?(?:src=['"](\S+?)['"])?\B[\S\s]*?>)([\s\S]*?)(</script>)
這與最后一個腳本標簽不匹配
它出什么問題了?
編輯:刪除\\ B確實匹配所有腳本標簽,但是后來我沒有在單獨的組中獲得src屬性的內容。 我需要做的是從兩個類別的腳本標簽組中
我需要刪除腳本的打開和關閉標簽,但將內容保留在標簽內如果是第一種類型,我仍然需要刪除標簽,但將路徑保存在單獨的表中,希望可以進一步闡明它
正如iCodez的鏈接很有趣地顯示的那樣,正則表達式不應該解析HTML,因為HTML不是一種常規語言。 而是嘗試使用諸如BeautifulSoup
的解析器。 確保還安裝了lxml
和html5lib
以獲得最佳性能並訪問所有功能。
pip install lxml html5lib beautifulsoup4
應該可以。
如果我同意不使用RegExp解析HTML的所有評論,並且還提供了我自己確信自己將處理的文檔足夠常規的情況,那么我自己可以沉迷於這種邪惡的做法,請嘗試刪除\\B
,在我的測試中匹配所有三個腳本。
順便說一下,這個“無邊界”是什么意思? 我不確定我理解您為什么插入它。 如果出於某種原因有必要我不明白,請告訴我,我們將嘗試尋找另一種方法。
編輯:為了保留src內容,請嘗試
(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</script>)
這對我有用,請對照您的其他樣本。 考慮您的first [\\s\\S]*?
在沒有“ src”屬性時已經匹配了所有內容,直到>
為止,因此第二個條件只有在“ src”存在並且您要匹配其他可能的屬性時才有意義。
對於傻笑,這是我完全偶然發現的一種超簡單方式(作為js字符串,該字符串將被饋送到RegExp構造函數中:
'src =(= | =“)'+ yourPathHere +'[^ <] <\\ / script>'
yourPathHere的正斜杠已轉義; 因此,作為純RE,類似:
/src=(=|=")/scripts/someFolder/script.js[^<]</script>/
在嘗試找出gulp流時,我在gulp任務中使用的::]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.