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: 宋体;">架构 &nbsp; &nbsp;&nbsp; <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: 宋体;">架构 &nbsp; &nbsp;&nbsp; <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批量修改——正则表达式实践的更多相关文章

  1. 使用powershell批量修改文本为utf8

    根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp ...

  2. Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等

    http://blog.sina.com.cn/s/blog_62e7fe670101dg9d.html linux下二进制文件查找: strings 0000.ts | grep -o " ...

  3. 批量修改文件名(Python)

    和上篇博文经历类似, 批量修改文件名字. : ) 不多说, 看图, 程序运行之前: 程序要做的事情呢, 就是挖出"[]"中的集数, 并用 “第[]集”来修改文件名字. 下面是Pyt ...

  4. Linux下批量修改文件名(rename)

    原文地址: http://blog.csdn.net/sea_shore/article/details/6102437 1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修 ...

  5. ubuntu下如何批量修改文件后缀名

    正确的方法是: 在命令行中输入   rename   's/\.JPG/.jpg/'    *.JPG [注意] 在单引号中的最后一个'/'符号不能少! 意思是:把当前文件夹下的所有 .JPG文件 替 ...

  6. linux rename命令批量修改文件名

    修改文件名可以用mv命令来实现 mv filename1 filename2 1 但如果批量修改还是使用rename命令更为方便 现在我们有a b c d 四个文件 增加后缀 rename 's/$/ ...

  7. 在Linux中批量修改字符串的命令

    昨天一个朋友忽然问我,在Linux下如何批量修改字符串,当时瞬间懵逼了,完全想不起来....... 今天特意的重温了一下Linux下的一些常用命令,并将这个遗忘的批量修改字符串的命令记录下来(资料来自 ...

  8. Python批量修改文件名(os库)

    问题: 在某一文件夹内有97个sql文件,全部都以统一格式命名,例如“A201222-广州李小龙纪念协会-1-广州李小龙纪念协会-2018.AUD” 由于有两段重复了,而且中间的“1”也没有意义,需要 ...

  9. rename 批量修改文件名

    1.rename的用法 rename与mv的区别就是mv只能对单个文件重命名,而rename可以批量修改文件名 linux中的rename有两种版本,一种是C语言版的,一种是Perl版的.早期的Lin ...

随机推荐

  1. Asp.Net MVC 5使用Identity之简单的注册和登陆

    由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 首先新建一个项目 其次如下选择Empty和MVC的选项 然后打开NuGet包管理器分别安装几个包 ...

  2. vue函数防抖和节流

    Vue函数防抖和节流https://zhuanlan.zhihu.com/p/72363385 <template> <div> <input type='text' v ...

  3. AI-sklearn 学习笔记(一)sklearn 一般概念

    scikit-learn Machine Learning in Python Simple and efficient tools for data mining and data analysis ...

  4. DbArithmeticExpression arguments must have a numeric common type.

    引用 system.data.linq

  5. Linux架构之Nginx Web基础1

    第41章 Nginx Web基础入门 41.1 Nginx部署 41.1.1 Nginx的安装方式   源码编译 官方仓库 epel仓库 优点 规范 安装简单 安装简单   便于管理 配置易读   缺 ...

  6. 使用Github 当作自己个人博客的图床

    使用Github 当作自己个人博客的图床 前提 本文前提: 我个人博客的草稿是存放在 github上的一个仓库 diarynote 截图存放的图片或者需要放在文章中图片,会固定存放在对应的文件夹中,我 ...

  7. Mybatis学习笔记大纲

    Mybatis学习笔记大纲: 一.MyBatis简介 二.MyBatis-HelloWorld 三.MyBatis-全局配置文件 四.MyBatis-映射文件 五.MyBatis-动态SQL 六.My ...

  8. 关于BFC的总结

    虽然工作这么多年了,但是如果让我直接解释一下什么是BFC的时候,还是感觉有点不知道怎么准确的表达,下面就翻翻文档,总结一下,加深一下认识吧.大家也可以关注我的GitHub后续的更新 1.BFC的基本概 ...

  9. TFrecords读、写图片文件

    参考:https://blog.csdn.net/u014802590/article/details/68495238 参考:https://www.2cto.com/kf/201709/68057 ...

  10. Oracle12c创建及删除PDB

    在12C R1版本中只支持Global Shared Undo模式,所有container共享一个UNDO表空间:在12C R2引入了PDB Local Undo模式,每个container都有自己的 ...