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 ...
随机推荐
- NancyFx框架之检测任务管理器
先建一个空的项目和之前的NancyFx系列一样的步骤 然后建三个文件夹Models,Module,Views 然后分别安装一下组件 jQuery Microsoft.AspNet.SignalR Mi ...
- Linux时间命令date
date:打印当前时间 date "+定制信息":自定义格式打印时间 - date "+%H":打印当前时间的小时数 - date "+%H%M%S& ...
- [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7) - (2/5)
- pg_controldata - 显示一个 PostgreSQL 集群的控制信息
SYNOPSIS pg_controldata [ datadir] DESCRIPTION 描述 pg_controldata 打印那些在 initdb 过程中初始化的信息,比如表版本和服务器的区域 ...
- linux--基础知识5
#文件合并与文件归档 #cat /etc/passwd > new_pass.txt (创建一个新的文档并将cat/etc/passwd的内容合并进来) #echo "xxxx&quo ...
- thinkphp 系统变量
一.查看可用变量 dump($_SERVER); 可以直接在html输出系统变量的值 <p>{$Think.server.HTTP_HOST}</p>. 二.环境变量 1.查看 ...
- js如何判断用户使用的设备类型及平台
前端开发经常遇到需要判断用户的浏览设备,是pc端还是移动端,移动端使用的是什么手机系统?android.ios.ipad.windows phone等等,有时候还需要知道用户浏览页面是在微信中打开还是 ...
- hdu 5212 : Code【莫比乌斯】
题目链接 题给代码可以转化为下面的公式 然后用F[n]记录公约数为n的(a[i],a[j])对数,用f[n]记录最大公约数为n的(a[i],a[j])对数 之后枚举最大公约数d 至于求F[n],可以先 ...
- 【leetcode】486. Predict the Winner
题目如下: Given an array of scores that are non-negative integers. Player 1 picks one of the numbers fro ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 动态规划 + 斜率优化
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long #define x(i) (b[i+1]) ...