簡體   English   中英

正則表達式以匹配python中的不同腳本標簽

[英]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屬性的內容。 我需要做的是從兩個類別的腳本標簽組中

  1. 一個帶有src屬性的腳本,該腳本具有實際腳本的路徑
  2. 第二個沒有src屬性的普通內聯javascript

我需要刪除腳本的打開和關閉標簽,但將內容保留在標簽內如果是第一種類型,我仍然需要刪除標簽,但將路徑保存在單獨的表中,希望可以進一步闡明它

正如iCodez的鏈接很有趣地顯示的那樣,正則表達式不應該解析HTML,因為HTML不是一種常規語言。 而是嘗試使用諸如BeautifulSoup的解析器。 確保還安裝了lxmlhtml5lib以獲得最佳性能並訪問所有功能。

pip install lxml html5lib beautifulsoup4

應該可以。

如果我同意不使用RegExp解析HTML的所有評論,並且還提供了我自己確信自己將處理的文檔足夠常規的情況,那么我自己可以沉迷於這種邪惡的做法,請嘗試刪除\\B ,在我的測試中匹配所有三個腳本。

順便說一下,這個“無邊界”是什么意思? 我不確定我理解您為什么插入它。 如果出於某種原因有必要我不明白,請告訴我,我們將嘗試尋找另一種方法。

編輯:為了保留src內容,請嘗試

(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</scrip‌​t>)

這對我有用,請對照您的其他樣本。 考慮您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM