使用使用Editplus正则表达式排版疑难电子书一例
看过本站《txt格式电子书排版经验浅谈》这篇文章的朋友,一定可以使用editplus+dreamedit的组合消除常见文本文件中的硬回车了。但是,有的时候却无法在消除硬回车的同时取得完美的排版,比如下面这个例子。
这是一个章回体的小说,文本文件使用EDITPLUS打开后如图:
 鼠标滚轮可以缩放图片
假如直接使用dreamedit进行排版以消除硬回车,则会出现如下图的情况:
 鼠标滚轮可以缩放图片
我们可以看到,每一回的标题与内容都被连成了一个段落,显然阅读起来非常的不方便。这本小说有300多回,我们不可能一个个的去手动输入回车使标题与内容区分开来。
如果每一个标题后面要是能空一行就好了,这样消除硬回车的时候恰好会把空行消除,而使标题与内容在两个段落中。www.sjshu.com
回到EDITPLUS,仔细看了每一个标题,除了“第....回”这几个字有些规律外,后面的标题根本没有规律。。。。这可怎么办呢?如果仅仅通过“第....回”这几个字就能选取一行,我就有办法在行尾添加一个回车符号。试试 EDITPLUS功能强大的正则表达式吧。。。。。
几经探索,终于找到了能够通过那几个字选取一整行标题的办法,并且使用替换功能在每一行标题后面添加一个回车,www.sjshu.com如图:
 鼠标滚轮可以缩放图片
查找内容框中的" ^ +(第).+(回).* "表示如下含意:www.sjshu.com “^”表示从行首开始匹配。 注意“^”和“+”之间还有个空格的,为什么?因为从图中可以看出“第...回”前面有若干个空格,这我们必须考虑进去才能匹配。 “+”表示匹配一次或更多,放在空格后面,表示“有一个或更多的空格” (第)表示若干个空格后面有个“第”字 “.”表示任意一个字符。因为在“第”字后面是“一”“二”“一百零五”等具体章回数。可能是一个字,也可能是两个字。。。。于是我们又加了一个“+”,上面说到这代表匹配一次或更多,也就是若干个任意字符。 (回)自然代表“第”“若干个任意字符”后面紧跟着就是“回”字 至此类似“ 第十一回 乘风飞驶渡淮河 淡月无光劫敌寨”这样的标题中,我们已经能定位类似“ 第十一回 ”这部分文字了。www.sjshu.com
后面的字句完全没有规律,反而很好办,还是利用正则表达式的“.*”(事实上,这里的*也可以使用+来表示)来表示,其含意为"若干个任意字符",这样,含有"第多少回"的标题这一整行我们完全可以分别搜索到了.
我们的目的是在这些标题后面添加一个空行,空行在EDITPLUS的正则表达式中用"\n"来表示.而替换为框里还有一个"\0",这是正则表达式中"表示所有元素"的意思,也就是说,这个"\0"代表了"^ +(第).+(回).* "这个表达式,那么已经很明显了,"\0\n"就表示"^ +(第).+(回).* 后面再加一个空行"www.sjshu.com
OK,整个使用正则表达式表示的搜索替换操作表述了这样的含意:查找所有以若干个空格开头的含有第...回字样并且紧跟着若干个文字这样一行内容,在其后面加一个空行!
替换操作完成之后,我们再回到DREAMEDIT软件中,对刚刚进行过编辑的文本文件进行排版,得到如下效果:
 鼠标滚轮可以缩放图片
至此,整个消除硬回车并完美排版的操作全部完成! |