热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术-正则表达式处理读书器的章、节、回问题

原创解决办法一:PatternpatternPattern.compile(第(.|..)章);这里填写的是正则表达式,主要用来分第X章Matchermatcher

原创解决办法一:

Pattern pattern = Pattern.compile("第(.|..)章");//这里填写的是正则表达式,主要用来分第X章

Matcher matcher = null;

matcher = pattern.matcher(searchStr);

if (matcher.find()) {

section = matcher.group();//得到返回的章

}


转载解决办法二:来自http://tieba.baidu.com/p/2256063139 百度贴吧:【伪技术】使用正则表达式在txt小说的章节名称前加##

主要是在百度文库《calibre电子书制作教程》中得到的启发,并参照爱尔兰之狐Txt2ebook中的正则表达式加以修改。正文见2楼。
至于为何要在章节名称前加##,以及如何制作带目录的mobi电子书请参照贴吧精品:
http://tieba.baidu.com/p/2172085169

需要使用到的软件:
1、排版软件:排版助手(GIDOT TYPESETTER) ,功能强大的排版软件
2、文本编辑器,emeditor (其实就是记事本的威力加强版,支持正则表达式)


在网上找一本小说,最好本身是精校的。这里以我下载的一本白鹿原为例。
用emeditor打开小说,可以发现段落之间有空行,首行缩进也不统一。

这里就要用到排版助手了,将小说导入排版助手,点击“执行”,再保存。可以发现,文章的排版已经变化,首行缩进是两个全角空格,段落之间也没空行了。(注:排版助手这个软件博大精深,值得大家研究)


再用emeditor打开排版后的txt,我们开始为每一章标题前加#或者##。
在emeditor当中按CTRL+H


在“查找”栏填入正则表达式:
\s\s第.+[章节回][\s\n]
这是正则表达式的语法,\s表示空格, \s\s表示两个空格,\n表示换行,所以\s\s第.+[章节回][\s\n]表示只要以两个空格开始的第(*)章后面跟空格或者换行的任意文字串在替换栏中输入##\0, ##是h2的表示, \0表示寻找到符合正则表达式的字符串。
点击“替换全部”,所有章节名前面都加入了##标记。

全部替换之后,可以发现章节前面全部加上了##,共替换了34个字符串,经检查本书也确实是34章。
替换之后,另存文本为UTF-8格式,然后就可以用calibre处理了:



我个人总结了两种正则表达式,应该可以适合大部分的网络书籍。
1、第 章/节/回
如第一章、第二节、第3回等等这类的,
使用表达式:\s\s第.+[章节回][\s\n]
2、直接是中文数字或者阿拉伯数字
如一、二十二、1、33这类的,
使用表达式:\s\s(零|一|二|三|四|五|六|七|八|九|十|百|千|[0-9])+[\s\n]+ 

注:必须要经过排版助手处理后才能用,因为\s\s指的是章节前的两个全角空格,而且最好用emeditor编辑,因为不同编辑软件使用的正则表达式语法可能有所不同。


推荐阅读
author-avatar
nj擁我自己的天空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有