正则表达式中的插入操作
写爬虫的时候,使用正则表达式提取、替换数据可以说是常规操作;之前总是很急功近利,以为记住几个常用的符号就能覆盖大部分使用场景了,反正来来回回都是在Python环境中,再不多写几个语句就能处理掉。
当然,正则的强大从一开始接触也是有所了解,不愿意再深入学习一是时间有限,二是确实没到非用不可的时候。最近,刚好有这么一个需求,于是又折回去看了一眼,在这里简单记录一下吧!
具体需求:学习django的过程中,从网上找了一个前端模板simple-admin,根据教程指示把模板的js/css/img等文件单独放入应用下的/static/文件夹,html文件则一股脑放入了/templates/。但html中引用的静态文件路径都还是同一文件夹下,这样就需要引入static变量,并逐一进行修改。
这是非常大的一个工作量,使用正则查找了一下有待修改的文件,仅index页面就有30多出需要修改,手动进行效率非常低下。既然格式非常相似,使用visual studio的查找替换功能应该可以解决,恰好支持正则表达式。但之前只是将特定模式的字符串替换成新字符串,如何在正则匹配到的特定位置进行插入呢?
通过查询文档,找到了正确的姿势:
正则表达式中的
(pattern)
匹配pattern并获取这一匹配。所获取的匹配可以从产生的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
即可。
因为还有些细节问题需要处理,再加上我对正则的理解不太到位,实际上的表达式可能有些冗余和粗暴,这里就大概放个截图吧,效果还是杠杠的!