我们在修改pvf的过程中,有时候会有批量删除某些词条的功能,比如删除装备中的魔法封印词条。近期我就遇到了这个需求,研究了一下,并且解决了这个问题。其实就是正则表达式的活学活用。在此分享给大家。

一、需求复现

我这边的PVF里面有57万条装备的数据,但是我又不知道哪些装备是魔法封印,并且魔法封印的装备分布在各个文件夹,很明显没法一个个找找出来修改。所以我全部进行了导出。一共577090个文件。

并且我们知道,魔法封印的词条是这样的:

[random option]
	1

可以看看这个实例文件

我们需要删除的是39、40、41行。只需要用正则表达式批处理删除就可以了。解决这个问题倒是其次,主要是正则表达式的某些写法和匹配机制。

很明显,如果我们要匹配到[random option]我们用\[random option\]就可以了,如果需要匹配到下一行的1,由于1前面有一个制表符,我们需要把正则表达式修改为\[random option\]\r\n\t1,效果如下:

匹配上了。

我们直接替换掉,替换地方留空,就可以删除这个词条和下面的1.

但是这里空出来两行。这肯定不是我们想要的,我们只想留一行。一方面是如果每个词条字段都这样删除,最后会空出来很多行,不利于浏览,排版也不好看。二来,可能会有意想不到的BUG,导致游戏没法运行。三来,我有强迫症。

这个时候,我们在\[random option\]\r\n\t1的前面加上一个\r\n匹配到[random option]上的一个空行,就能匹配上着三行了,接下来再替换。

这个时候就是我们想要的效果了。只留下了一个空格。

========================================================

这个时候我们延伸一下。如果我们要删除下面这些内容呢?正则表达式怎么写?

其实很简单了,已经知道\r\n和\t的写法了。我们完全可以手搓一个正则表达式出来。这里我来写一个:

\[magical defense\]\r\n\t78\r\n\r\n\[equipment magical defense\]\r\n\t6800\t6640\r\n\r\n\[random option\]\r\n\t1

我们可以看到,也可以正确匹配的上。别看上面的表达式很长,其实就是\r\n\t的拼接,没什么难度。照着结构写就可以了。但是可以看出来,正则表达式是很灵活的,可以根据自己的需要去写,匹配不同的内容。

看完这个文章,相比你应该也明白正则表达式的基本写法了。如果对你有帮助。可以留下你的评论。