7C00.ME/houmu 2013-03-24

Editplus小技巧去除多余的换行

从网上下载的一些小说txt文件,不少会按照每行一定字数给换行,这样做大概是方便一些PC上的文本阅读器,但是我通常是在手机上看小说的,手机上的阅读器会根据屏幕尺寸对内容进行重拍版,这样一来,就总是出现“一行满,一行残”的效果,不但视觉效果极差,而且总是在语意连贯的地方突然换行(有的阅读器认为换行就是分段,会自动在行前缩进),这样读起来颇费劲。

本来想写个脚本来去除这些多余的换行,不过由于惰性,或者想杀鸡焉用牛刀,想到了用编辑器。Windows环境下面最喜欢的编辑器是EditPlus,就用它了。

要去除多余的换行,最简单的做法就是把所有的\r\n给替换成空字符(不是空白或者空格),但是这样的一个副作用是本来应该换行的地方也给去掉换行符了,整个txt文件都成一行了,肯定也不行。我这里想到的办法是对换行符(\r\n)前的字符进行筛选,就是过滤掉“。”、“!”、“””、“?”这些通常出现在句尾的标点符号出现在换行符前的情形。这样做当然也不准确,一个明显的问题就是如果每段前有标题,那么这个标题就被计入下一段的开头了,不过对于小说这个问题不是很大,一般阅读过程中可以识别出来,而且解决起来也不甚方便,付出和收益不是很合算,就不去管这个问题了。

按Ctrl+H调出EditPlus的替换对话框,里面有个“正则表达式”的复选框,这个肯定勾上。先尝试发现换行符,在“查找”旁边的文本框输入“\r\n”,结果没有找到任何结果,查找旁边的下拉箭头点一下出现一个下拉菜单,有个“换行符”的选项,点一下后在查找文本框自动添加了“\n”,于是尝试用\n去查找换行符,结果找到了。这里文件的换行符应该是\r\n,因为EditPlus状态栏显示有个区域显示的是PC,而不是Unix或Mac,表示了换行符类型是\r\n。而为什么通过\n才能找到呢?我猜是EditPlus为了实现对对多平台文件编辑而对换行符在正则表达式里进行了抽象统一。而后进行过滤,把\n改成[^。”!?]\n,这样可以查找到所有“想要”去除的换行符,但是这样查找的结果是把换行符前的一个字符也给包含了。于是想到了正则表达式里面的group,不知道EditPlus支不支持regexp的group,尝试了一番,最后还是通过点击查找和替换输入框右边的下拉菜单的一些启发找到了group替换(Editplus里面叫做标记表达式)的办法,即把([^。”!?])\n替换为\1,如下图:

点击全部替换就完成了。EditPlus不负众望,马到成功。