如何构造正则,抽取两个“.”号之间的内容?
原文件格式如下:
1..test.major information.http://www.abcdefg.com.2012
2...http://www.abcdefg.com/index.html.2011
3.Mike, G..this is for test.2012
4.Bob, E. J..make a .2010,15(2):60-71
……每一行我想要的数据是两个“.”号之间的
如:
第一行:"",test,major information,http://www.abcdefg.com,2012
第二行:"","",http://www.abcdefg.com/index.html,2011
第三行:Mike, G.,this is for test,2012
第四行:Bob, E. J.,make a ,2012Note:
1、点号可能有三种含义,①表示内容的分割符,②外国名字的缩写,③URL的组成
2、表示分割符时,如果两个点号之间没有内容,表明需要截取出的是空串""如何构造相应的正则表达式进行匹配?

解决方案 »

  1.   

    这个用正则来做不是很完美,因为每个[.]代表的意义不一样,没法区分,所以最好是先按每种意义把[.]转成其它字符,再分割,再把字符转成[.]
    这里给出一段不是很完美的正则做法
    String[] sa = { //测试字符串
        "..test.major information.http://www.abcdefg.com.2012",
        "...http://www.abcdefg.com/index.html.2011",
        ".Mike, G..this is for test.2012",
        ".Bob, E. J..make a .2010,15(2):60-71"
    };
    for (String s : sa) {
        //把URL以外的[.]转成[|],再把名字缩写的[|]转成[.],再按[|]分割
        String[] ss = s.replaceAll("(?<!www)[.](?!(html|com))", "|").replaceAll("(?<=[A-Z])[|]", ".").split("[|]"); 
        System.out.println(Arrays.toString(ss));
    }