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()) {
    forint 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


    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: