寫爬蟲的時候,使用正則表達式提取、替換數(shù)據(jù)可以說是常規(guī)操作;之前總是很急功近利,以為記住幾個常用的符號就能覆蓋大部分使用場景了,反正來來回回都是在Python環(huán)境中,再不多寫幾個語句就能處理掉。
當然,正則的強大從一開始接觸也是有所了解,不愿意再深入學習一是時間有限,二是確實沒到非用不可的時候。最近,剛好有這么一個需求,于是又折回去看了一眼,在這里簡單記錄一下吧!
具體需求:學習django的過程中,從網(wǎng)上找了一個前端模板simple-admin,根據(jù)教程指示把模板的js/css/img等文件單獨放入應用下的/static/文件夾,html文件則一股腦放入了/templates/。但html中引用的靜態(tài)文件路徑都還是同一文件夾下,這樣就需要引入static變量,并逐一進行修改。
這是非常大的一個工作量,使用正則查找了一下有待修改的文件,僅index頁面就有30多出需要修改,手動進行效率非常低下。既然格式非常相似,使用visual studio的查找替換功能應該可以解決,恰好支持正則表達式。但之前只是將特定模式的字符串替換成新字符串,如何在正則匹配到的特定位置進行插入呢?
通過查詢文檔,找到了正確的姿勢:
正則表達式中的
(pattern)匹配pattern并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的Matches集合得到,JS中使用$1...$9來獲取屬性。(貌似有些地方用\1...\9這種也可以獲取。)
本來以為有挺多需要擴展的,但是針對我這個需求好像知道這些也足夠了。
我們想做的是將形如
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"> 修改為
<link href={% static "bootstrap/css/bootstrap.min.css" %} rel="stylesheet">。
也就是匹配到href=保存為$1,".*.css|js|jpg"保存在$2,引號后的任意字符保存在$3。然后替換成$1 {% static $2 %}$3即可。
因為還有些細節(jié)問題需要處理,再加上我對正則的理解不太到位,實際上的表達式可能有些冗余和粗暴,這里就大概放個截圖吧,效果還是杠杠的!
