日期:2014-05-18  浏览次数:21480 次

正则表达式提取段落
我现在想对一个文本进行段落区分,提取第xx章 把这一行的内容都提取出来
比如“正文 第一章 天下”,“正文 第2章 天下2”,“第3章小白遇险记”,“第4章小白记” 之类的。
我的思路是先找到第xx章,然后前面取20个字符左右,后面找到遇到回车就结束。但是第xx章进行匹配的时候现在还有问题。
我想把“第一名,这个是他的文章”这样的给去除,既第xx章中间不能有符号(,。)之类的东西。

我写一个正则表达式,这个正则表达不是很准确。
\\b(.){0,20}第([^,,。])(.){0,20}[章,节,回](.)*[^.]

因为他会匹配 “你好Json第一名,这个是他的文章写的啊”。
因为 ([^,,。])(.){0,20}中的后面的.相当于把前面的限制清除了,我不知道怎么把.写进去。
如果有高手,帮我完善下。

------解决方案--------------------
(句点字符。) 匹配除 \n 以外的任何字符。如果已用 Singleline 选项做过修改,则句点字符可与任何字符匹配,请注意,正字符分组或负字符分组中的句点字符(方括号内的句点)将被视为原义句点字符,而非字符类。
可以放到分组中,那样识别为句点字符,或者你就用\u002e来代表句点,
------解决方案--------------------

[^\n]{0,20}(?=第\d+章)