查看原文
其他

替换净化基础教程

kunfei 开源阅读 2023-02-11

之前给大家分享过基安@烏雲大佬的替换净化规则,很多人就一直希望能出一期关于替换净化的教程,所以今天给大家分享一下来自基安@panache大佬的教程:


首先是不需要用到正则表达式的: 

    

比如这种:



其实一般遇到这种,写书源的人都会把它去掉

就像这样:



 ##后面就是指提取出来的内容不包括这个; 


当然没去掉也可以手动选择,然后替换

比如这样:



替换为输入你想替换成的内容,想去掉那就留空。 



这样就好啦!这种适用于原模原样替换掉的。(一定要先关掉使用正则表达式这个选项)


接下来是包含正则的简单进阶:


正则表达式呢用文科生的话来讲就是相当于用某些特定符号来代表一部分内容,从而实现对某些特定内容的识别。 


然后因为本教程是小白向的,加上教程作者也是个小白,所以我们就不深挖正则表达式是什么了。


接下来就简单介绍一些常用的符号和使用示例: 


第一节      .和* 


  . 代表除换行外的任意字符,* 代表这个字符可以出现n次(n≥0),两个字符配合即.*可以代表任意一串字符,前提是不换行。 


也就是说,如果我想替换掉一串含有固定内容的文字,并且肯定这个固定内容基本不会在章节正文出现,我们就可以用.*固定内容.*来实现匹配。 


比如我想去掉这样的一串内容:


感谢灌溉营养液的小天使:Evildoer 2瓶; 

感谢投出地雷的小天使:奚山、瓜崽把id改长 1个;


我可以这样表达:感谢.*的小天使:.*


灌溉营养液,投出地雷是可变的,后面小天使的昵称也是可变的,但是感谢……的小天使:……是固定的内容,正则表达式就可以帮我们匹配上这样一段含有固定内容的文字。 


需要注意的就是:使用正则表达式的时候记得勾选使用正则表达式。



补充:

.代表除了换行外任意字符

\n代表换行

|代表或

()内代表一个整体

所以组合一下(.|\n)*就可以代表所有字符。


举个栗子:如果我想除掉作者有话说的所有内容


作者有话说:

blablabla 

wlawlawlajiliguala, 

henghengheiya


我可以这样表达:作者有话说:(.|\n)*


强调一下,注意\n前面那个不是撇/,是捺\


第二节  


第一节已经足够面对大多数需要去除部分内容或者对这些内容进行整体替换的情况了。


但是有时候还是会有部分匹配上的内容不需要去除,也就是这部分内容仅用于辅助匹配。甚至有可能需要用这部分内容作为替换后的一部分。


()可以帮助我们实现这个功能。在一段正则表达式里,一个()内的内容会被按()的顺序记为$1 $2 ……


也有不计入的情况,就比如(?:)(?=)(?!)


考虑到本教程实在是小白向,就不多涉及啦。有兴趣可以看楼下补充,简单讲了一点。


举个栗子:

如果我要把所有的『』改成“”,里面内容不变


原式:『啊,我美丽的祖国!』川建国高声吟诵道。 


表达:『(.*)』替换为“$1” 


效果:“啊,我美丽的祖国!”川建国高声吟诵道。


假如有这么一段表达式(abc)(def)(?:ghijk)(lmn)


那么$1是abc,$2是def,$3是lmn


以此类推。

    

当然我知道直接分别把『替换成“,』替换成”效果是一样的,但是我只是打个比方,不要太认真嘛!


然后再来个丰富点的栗子吧!


比如我把论坛做成了书源,已经只看楼主了,但是仍然可能会有楼主回复他人的内容。


当然我不想看的话确实可以用替换删掉。

但是偏偏我有时候是想看的……

然后论坛的格式是这样的:


奶奶灰 发表于 2020-4-17 08:43 

吼吼吼骨科骨科搞起来 

集美你很是懂啊 

行吗. 发表于 2020-4-17 09:24 

好看好看 

啊啊啊啊啊,谢谢支持,你也超可爱♡ʚ♡ɞ(ू• ̮ •ू❁) 


(读者ID)   

发表于 (时间)  

(读者回复)  

(作者回复)


虽然不改也行,但是强迫症就是觉得难受

所以我的表达式:(.*).*发表于.\n\s(.*)\n\s(.*)

这样,读者ID就是$1,读者回复就是$2,作者回复就是$3,我就可以用我喜欢的格式把他们搭在一起了


比如这样:

——@$1:【$2】 

——作者回复 :$3


然后表达效果就是

——@奶奶灰:【吼吼吼骨科骨科搞起来】 

——作者回复:集美你很是懂啊


当然大家可以根据自己的喜好来设置。


顺便解释一下我的这串表达式


(.*)发表于.*\n\s(.*)\n\s(.*)


每个符号都是老朋友啦,我就解释一下各自的对应


意思就是:将发表于前面的内容保存为$1,将下一段除了开头空格外的内容保存为$2,再将下一段除了开头空格外的内容保存为$3。


识别出来的就是任意首段包含发表于的三段内容。


替换为……也是把这三段一起替换为……。


所以确实很可能存在误杀,但是还有一个替换范围可以自己设置为需要这种替换的论坛。


然后即使当我们发现误杀,我们也能够很快意识到为什么误杀,然后关闭对应的替换。


这也是我建议大家自己写替换净化的原因。


如果用别人写好的替换净化规则,只要出现了误杀你很可能都不知道为什么,然后一头雾水找原因。


补充:

(?<=)(?=)这对双胞胎。


等号后面的内容都是不获取的,也不计入$1 $2之类的他俩区别就是一个在前一个在后。


举个栗子:

比如我要去掉所有逗号后面的换行,那么这个逗号是不能去掉的,但是我们需要逗号来辅助匹配

    

那么可以这么表达:(?<=,)\n


同理我如果要去掉句号前面的换行,


那么可以这么表达:\n(?=。)


顺便介绍一下另一对双胞胎:(?<!)(?=!)


也是一个在前一个在后,叹号后的内容不会获取只是辅助匹配。


那么区别主要就在于这是匹配除了叹号后内容外的其他符合条件的内容。


比较少用到,只是顺便提及一下。


好了,以上就是替换净化的基础教程了,大家如果对正则表达式的具体用法很感兴趣,可以试试学习一下,点击阅读原文有一个不错的教程。


最后特别感谢一下panache大佬的无私分享和精心制作,也希望大家能够对大家有所帮助。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存