HTML批量修改——正则表达式实践
1.问题描述
如下所示的一段HTML代码:
...
<h2 align="justify"><span style="background-color: #99ccff;">2.1.<span style="font-family: 宋体;">从文件系统级理解</span><span style="font-family: Calibri;">ROS</span><span style="font-family: 宋体;">架构 <br></span></span></h2>
...
想将其整体转换为Markdown的标题格式:
#1.从文件系统级理解
2.初步研究
使用正则表达式<h2.*>
,检索结果为:
<h2 align="justify"><span style="background-color: #99ccff;">2.1.<span style="font-family: 宋体;">从文件系统级理解</span><span style="font-family: Calibri;">ROS</span><span style="font-family: 宋体;">架构 <br></span></span></h2>
这样可以做到检索到所需要的代码段,但是还没能做到将所需的文字提取并缓存,以供替换。
3.进一步研究
3.1提取2.*中的序号*
若要提取出2.*中的序号*,需要使用到子表达式()。另外,由于*是贪婪的,必须使用?使表达式实现最小匹配。
使用正则表达式<h2.*?>
,检索结果为:<h2 align="justify">
。由于表达式非贪婪,只检索到第一个'>'便结束了。为了检测到第二个'>',我们将'.*?>'作为子表达式,条件为检索到2次。由于此结果我们不会使用,因此加上'?:'使之忽略对此匹配的捕捉。
使用<h2(?:.*?>){2}
,检索结果为:<h2 align="justify"><span style="background-color: #99ccff;">
。此时,只需要加入对'2.'的检索,即可将定位在2.*中的*处。由于.是特殊字符,加上''进行检索。
使用<h2(?:.*?>){2}2\.
,检索结果为:<h2 align="justify"><span style="background-color: #99ccff;">2.
。此时,使用对数字的检索'[1-9]'并加以限定为检索到1次,再加上子表达式并缓存其结果即可。
使用<h2(?:.*?>){2}2\.([1-9]){1}\.
,检索结果为:<h2 align="justify"><span style="background-color: #99ccff;">2.1.
,同时'2.1'中的'1'已被缓存为'\1'。
3.2提取标题
标题是第二个需要提取的内容,也即HTML代码中的”从文件系统级理解“。上文中已经提到的内容不会重复。
首先,定位到汉字之前。使用正则表达式<h2(?:.*?>){2}2\.([1-9]){1}\..*?>
,检索结果为:<h2 align="justify"><span style="background-color: #99ccff;">2.1.<span style="font-family: 宋体;">
。
然后,提取汉字内容。使用正则表达式<h2(?:.*?>){2}2\.([1-9]){1}\..*?>(\w*?)<
,检索结果为:<h2 align="justify"><span style="background-color: #99ccff;">2.1.<span style="font-family: 宋体;">从文件系统级理解
,同时标题被缓存为'\2'。
注意:'\w'在某些操作系统/环境的作用下,不支持检索汉字。因此也可以使用<h2(?:.*?>){2}2\.([1-9]){1}\..*?>(.*?)<
。
3.3选取全文
选取全文只需要在之前正则表达式的基础之上,加入对标题后字符的检索即可。
使用正则表达式<h2(?:.*?>){2}2\.([1-9]){1}\..*?>(\w*?)<.*>
即可。
3.4替换
替换同样不复杂,按照Markdown格式,替换为##\1.\2
。替换结果:##1.从文件系统级理解
。
注意:在部分软件/语言中,可能需要使用##$1.$2
。
参考资料
HTML批量修改——正则表达式实践的更多相关文章
- 使用powershell批量修改文本为utf8
根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp ...
- Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等
http://blog.sina.com.cn/s/blog_62e7fe670101dg9d.html linux下二进制文件查找: strings 0000.ts | grep -o " ...
- 批量修改文件名(Python)
和上篇博文经历类似, 批量修改文件名字. : ) 不多说, 看图, 程序运行之前: 程序要做的事情呢, 就是挖出"[]"中的集数, 并用 “第[]集”来修改文件名字. 下面是Pyt ...
- Linux下批量修改文件名(rename)
原文地址: http://blog.csdn.net/sea_shore/article/details/6102437 1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修 ...
- ubuntu下如何批量修改文件后缀名
正确的方法是: 在命令行中输入 rename 's/\.JPG/.jpg/' *.JPG [注意] 在单引号中的最后一个'/'符号不能少! 意思是:把当前文件夹下的所有 .JPG文件 替 ...
- linux rename命令批量修改文件名
修改文件名可以用mv命令来实现 mv filename1 filename2 1 但如果批量修改还是使用rename命令更为方便 现在我们有a b c d 四个文件 增加后缀 rename 's/$/ ...
- 在Linux中批量修改字符串的命令
昨天一个朋友忽然问我,在Linux下如何批量修改字符串,当时瞬间懵逼了,完全想不起来....... 今天特意的重温了一下Linux下的一些常用命令,并将这个遗忘的批量修改字符串的命令记录下来(资料来自 ...
- Python批量修改文件名(os库)
问题: 在某一文件夹内有97个sql文件,全部都以统一格式命名,例如“A201222-广州李小龙纪念协会-1-广州李小龙纪念协会-2018.AUD” 由于有两段重复了,而且中间的“1”也没有意义,需要 ...
- rename 批量修改文件名
1.rename的用法 rename与mv的区别就是mv只能对单个文件重命名,而rename可以批量修改文件名 linux中的rename有两种版本,一种是C语言版的,一种是Perl版的.早期的Lin ...
随机推荐
- git submodule删除多余模块
rm -rf 子模块目录 删除子模块目录及源码 vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目 vi .git/config 删除配置项中子模块相关条目 rm ...
- Sql Server 出现此数据库没有有效所有者问题
在新建数据库或附加数据库后,想添加关系表,结果出现下面的错误: 此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用“数据库属性”对话框的“文件”页或ALTER AUTHO ...
- Google Capture The Flag 2018 (Quals) - Reverse - Beginner's Quest - Gatekeeper
参考链接:https://ctftime.org/task/6264 题目 It's a media PC! All fully purchased through the online subscr ...
- vue2.0 通信
一.父子组件通信 父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息 具体机制如下图: 1.父组件传递数据给子组件 ( parent ==> child ...
- 微信 ios img图片不显示问题
使用div标签,将图片作为background .
- mobiscroll实现二级联动菜单
mobiscroll是一款非常使用的移动端选择控件,一般用来日期时间的选择的多,其实从官网上可以看到它有很多方面的使用,这里就不一一介绍了,有兴趣可以去官网上查阅一下 https://demo.mob ...
- java源码生成可运行jar
参考资料:https://blog.csdn.net/whatday/article/details/54767187 源码目录层级如下:
- js执行上下文与执行上下文栈
一.什么是执行上下文 简单说就是代码运行时的执行环境,必须是在函数调用的时候才会产生,如果不调用就不会产生这个执行上下文.在这个环境中,所有变量会被事先提出来(变量提升),有的直接赋值,有的为默认值 ...
- 第四章 QML语法
4.1 语法基础 import QtQuick 2.6 import QtQuick.Window 2.2 Rectangle { width: 400 height: 400 color: &quo ...
- CKEDITOR无缝粘贴word
由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直 ...