当你拿到课文的章节时,首先要确定节的开头标准。一般中文章节以“第一”开头,第一章,第二章等等。所以要用“”字符来确定第一位,但是很多时候章节前面会有一个空白字符。所有章节均以“否”开头,并做如下搭配。
\s否
“s”表示一个空白字符,加上“”表示0个或多个空白字符,“”表示以一个空白字符加上“第一个”开始。如果要匹配的字符串不在段落的开头,只需删除" "。
章节的序号模式不同。可能是阿拉伯数字,也可能是中文,长度一般不超过9位数,所以用随机字符匹配。{1,9}
"."表示随机字符,“{1,9}”表示最小长度为1次,最大长度为9次。
章节号后面是修图。
[章节卷收藏部分]
[]中隐含字符之一呈现,[]匹配单个字符,相当于章、节、卷、集、部、章或章的呈现。
一般问题中有空格字符,也可能没有匹配的空格字符。
\s
标题可以是任意字符,任意字符是“.”,0到多个任意字符。
一般章后都有换行符,所以最后一定要有换行符匹配。
n|r|rn
将以上所有规则合二为一。
(\sNo。) (.{1,9 })[章节卷收藏](\s)(。)(n|r|rn)
在这个正则表达式中,有六组,所有的表达式都是第一组,每个“()”的内部都是一组。【章卷收藏】是一组。正则表达式完成后,我们就可以用Java来获取段落的章节标题了。
public classTestRegex {/@ paramargs/
公共静态voidmain(String[] args) {
Teststring=第一场风暴 r 浩瀚的钱塘江日夜绕过临安牛家村,向东流入大海。
P=(( s优先)(。{1,9 })[章节收藏](\s)(。)( n | r | r n));
matcher matcher=(test string);while(()){ for(int I=0;I=();i ) {
(第一组:(一)-(一));
((一));
}
}
}
}
输出结果:
组0 : 0 - 9
第一次风雪冲击。
组1 : 0 - 1
顺序
第二组: 1 - 2
一个
第3组: 3 - 4
第4组: 4 - 8
风雪冲击
第5组: 8 - 9
我所有的自负都来源于我的自卑,我所有的英雄主义都来源于我的软弱。你之所以能言善辩,是因为你内心充满怀疑,你之所以深情,是因为你痛恨自己的无情。世界上没有什么是从虚无中诞生的。如果你站在光里,你的身后会有阴影。半夜有寂静,是因为你还没有听到声音。―马良《坦白书》