用java提取不同类型的文章标题就要设计出不同的正则表达式
最近,我从网上下载了一个用java编写的用正则表达式从文本文件中批量提取文本目录的程序。用该程序,我从《神墓》这本章回小说中成功提取了各章节的标题,如前三章的标题如下:
第一章 远古神墓
第二章 沧海桑田
第三章 人世悠悠
经过分析源代码,发现标题之所以能提取成功,关键是在代码中插入了“^第[\u3400-\u9FFF]章”这个正则表达式。
后来还发现,用这种类型的正则表达式提取目录,对题目的设计也是有要求的。也就是说,标题的设计要满足下列四个条件:一是文本中的各章节标题必须各占一行;二是每个标题前面左对齐,不留空格。三是“第”的后面和“章”的前面不留空格。“第”和“章”之间插入的数目字必须用中文数目字如“零一二三四五六七八九十百千”表示。
经过反复试验,发现要想用正则表达式从文本中提取目录,必须依据“量体裁衣”,“对症下药”的原则,针对不同类型的标题,设计出不同类型的正则表达式,如下图所示:
目录类型 | 正则表达式 |
第一章 | ^第[\u3400-\u9FFF]章 |
第 一 章 | ^第 [\u3400-\u9FFF] 章 |
第1章 | ^第[0-9]章 |
第 1 章 | ^第 [0-9] 章 |
1 一、 | ^[0-9] ^[\u3400-\u9FFF]、 |