如何构造正则,抽取两个“.”号之间的内容?
原文件格式如下:
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 mark.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 mark,2012
Note:
1、点号可能有三种含义,①表示内容的分割符,②外国名字的缩写,③URL的组成
2、表示分割符时,如果两个点号之间没有内容,表明需要截取出的是空串""
如何构造相应的正则表达式进行匹配?
------解决方案--------------------
这个用正则来做不是很完美,因为每个[.]代表的意义不一样,没法区分,所以最好是先按每种意义把[.]转成其它字符,再分割,再把字符转成[.]
这里给出一段不是很完美的正则做法
- Java code
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 mark.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));}