原创解决办法一:
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编辑,因为不同编辑软件使用的正则表达式语法可能有所不同。