Java应用正则表达式获取文本的章节名称
添加时间:2013-8-2 点击量:
获取文本的章节,起首要断定则节的开端标准,一般中文的章节都是以“第”开首,第一章、第二章等。所以应用“^”字符来断定首位,然则很多时辰章节前面会有空白字符,所有以“第”作为章节的开端,进行以下的匹配
^\\s第
“\s”默示空白字符,加上“”默示0到多个空白字符,“^”默示是以空白字符加上“第作为开端的”。若是须要匹配的字符串不是在段落的开端,把“^”去掉即可。
章节的序号格局不同一,有可能是阿拉伯数字,也有可能是中文,长度一般不会跨越9位,所以以随便率性字符来匹配
.{1,9}
“.”默示随便率性字符,“{1,9}”默示长度最小1次,最大9次。
章节序号后面是润饰
[章节卷集部篇回]
“[]” 默示里面的字符有一个呈现了,“[]”匹配单字符,相当于 “章”或“节”或“卷”或“集”或“部”或“篇”或“回” 呈现了。
在题今朝面一般有空白字符,也有可能没有所以添加空白字符的匹配
\\s
章节题目可所以随便率性字符,随便率性字符是“.”,0到多个随便率性字符就是
.
一般章节过后就是换行,所以最后要有换行的匹配
\n|\r|\r\n
将上方的所有正则组合成一个就是
(^\\s第)(.{1,9})[章节卷集部篇回](\\s)(.)(\n|\r|\r\n)
这个正则表达式中一个有个6个group,全部表达式是第一个group,每个“()”里面的就是一个group,[章节卷集部篇回]是一个group,完成了正则表达式,我们就可以用Java获取段落的章节题目了。
public class TestRegex {
/
@param args
/
public static void main(String[] args) {
String testString = 第一回 风雪惊变\r\n 钱塘江浩浩江水,日日夜夜无穷无休的从临安牛家村边绕过,东流入海。;
Pattern p = Pattern.compile((^\\s第)(.{1,9})[章节卷集部篇回](\\s)(.)(\n|\r|\r\n));
Matcher matcher = p.matcher(testString);
while (matcher.find()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println(group + i + : + matcher.start(i) + - + matcher.end(i));
System.out.println(matcher.group(i));
}
}
}
}
输出成果:
group0 : 0 - 9
第一回 风雪惊变
group1 : 0 - 1
第
group2 : 1 - 2
一
group3 : 3 - 4
group4 : 4 - 8
风雪惊变
group5 : 8 - 9
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
获取文本的章节,起首要断定则节的开端标准,一般中文的章节都是以“第”开首,第一章、第二章等。所以应用“^”字符来断定首位,然则很多时辰章节前面会有空白字符,所有以“第”作为章节的开端,进行以下的匹配
^\\s第
“\s”默示空白字符,加上“”默示0到多个空白字符,“^”默示是以空白字符加上“第作为开端的”。若是须要匹配的字符串不是在段落的开端,把“^”去掉即可。
章节的序号格局不同一,有可能是阿拉伯数字,也有可能是中文,长度一般不会跨越9位,所以以随便率性字符来匹配
.{1,9}
“.”默示随便率性字符,“{1,9}”默示长度最小1次,最大9次。
章节序号后面是润饰
[章节卷集部篇回]
“[]” 默示里面的字符有一个呈现了,“[]”匹配单字符,相当于 “章”或“节”或“卷”或“集”或“部”或“篇”或“回” 呈现了。
在题今朝面一般有空白字符,也有可能没有所以添加空白字符的匹配
\\s
章节题目可所以随便率性字符,随便率性字符是“.”,0到多个随便率性字符就是
.
一般章节过后就是换行,所以最后要有换行的匹配
\n|\r|\r\n
将上方的所有正则组合成一个就是
(^\\s第)(.{1,9})[章节卷集部篇回](\\s)(.)(\n|\r|\r\n)
这个正则表达式中一个有个6个group,全部表达式是第一个group,每个“()”里面的就是一个group,[章节卷集部篇回]是一个group,完成了正则表达式,我们就可以用Java获取段落的章节题目了。
public class TestRegex {
/
@param args
/
public static void main(String[] args) {
String testString = 第一回 风雪惊变\r\n 钱塘江浩浩江水,日日夜夜无穷无休的从临安牛家村边绕过,东流入海。;
Pattern p = Pattern.compile((^\\s第)(.{1,9})[章节卷集部篇回](\\s)(.)(\n|\r|\r\n));
Matcher matcher = p.matcher(testString);
while (matcher.find()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println(group + i + : + matcher.start(i) + - + matcher.end(i));
System.out.println(matcher.group(i));
}
}
}
}
输出成果:
group0 : 0 - 9
第一回 风雪惊变
group1 : 0 - 1
第
group2 : 1 - 2
一
group3 : 3 - 4
group4 : 4 - 8
风雪惊变
group5 : 8 - 9
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》