|
明白你为什么问把两个空格变成一个空格了,呵呵
还好,文本生成方面的程序没有考虑到什么对齐之类的padding问题,否则,简单的替换也不起作用的,呵呵
至于xml输出,并不是所有程序设计的时候都有这方面的考虑的,从另一方面讲,即便有这样的考虑,结果可能会更难办,不幸遇到过几次,颇让人伤脑筋,呵呵
对于正则表达式,难点主要在于汉字匹配(可能中文系统下没问题吧),其他的都比较简单。
import java.util.regex.*;
public class RegexpTest {
private static Pattern pattern = Pattern.compile("\\s*([\\p{InCJK Unified Ideographs}||\\p{InCJK Unified Ideographs Extension A}||\\p{InCJK Compatibility Ideographs}||\\p{InCJK Compatibility Forms}||\\p{InEnclosed CJK Letters and Months}||\\p{InSmall Form Variants}||\\p{InBopomofo}||\\p{InBopomofo Extended}]*)\\s*([0-9]*)\\s*([0-9]{4}\\-[0-9]{1,2}\\-[0-9]{1,2})\\s*([0-9]{2}:[0-9]{2}:[0-9]{2})\\s*([0-9]{4}\\-[0-9]{1,2}\\-[0-9]{1,2})\\s*([0-9]{2}:[0-9]{2}:[0-9]{2})\\s*([0-9]{2}:[0-9]{2}:[0-9]{2})\\s([0-9]*)\\s*([\\p{InCJK Unified Ideographs}||\\p{InCJK Unified Ideographs Extension A}||\\p{InCJK Compatibility Ideographs}||\\p{InCJK Compatibility Forms}||\\p{InEnclosed CJK Letters and Months}||\\p{InSmall Form Variants}||\\p{InBopomofo}||\\p{InBopomofo Extended}]*)\\s*([0-9]*\\.[0-9]*)\\s*([0-9]*\\.[0-9]*)\\s*" ;
public static void main(String[] args) throws Exception {
String[] txt = new String[] {
"\u6bf3 59125566 2007-1-4 10:17:18 2007-1-4 10:18:06 00:00:48 1 \u6bf3 0.11 0.22",
"小明 59125566 2007-1-4 10:17:18 2007-1-4 10:18:06 00:00:48 1 市话默认 0.11 0.22\n",
new String("小强 59125566120 2007-1-4 10:25:06 2007-1-4 10:27:31 00:02:25 1 市话默认 0.11 0.22 \n".getBytes("UTF-8" ,"UTF-8" };
Matcher m = null;
for (String s : txt) {
m = pattern.matcher(s);
if (m.matches()) {
for (int i = 1; i <= m.groupCount(); i++)
System.out.printf("Group %s = %s\n",i,m.group(i));
} else {
System.out.printf("Error! String \"%s\" not matched!\n", s);
}
}
}
}
比较复杂的代码部分主要是汉字在unicode表中的分布了,因为汉字占用了不止一个unicodeblock,所以判断起来就比较繁琐了。
结果比较简单,11个组,当然如果需要对年月日,时间,分秒都要细分的话,可能组数会更多一些,或者如果有些字段不需匹配,也可以少一些。不过觉得这都是小问题,可以另外处理。
另外要说明的是,如果有字符集问题,可以参照代码中的处理,也可能不需要,在非中文系统下编译问题不大,却挺烦人,比写程序时间还长,呵呵
Group 1 = 小明
Group 2 = 59125566120
Group 3 = 2007-1-4
Group 4 = 10:25:06
Group 5 = 2007-1-4
Group 6 = 10:27:31
Group 7 = 00:02:25
Group 8 = 1
Group 9 = 市话默认
Group 10 = 0.11
Group 11 = 0.22
另,关于文中unicode block的名称,和正则表达式的标准,可以参见http://www.unicode.org/reports/tr18/#Simple_Word_Boundaries 和http://www.unicode.org/reports/tr18/#Character_Blocks |
|