有这样一个字符串:
#'1998-04-26 08:48:00' 博客斯多夫 2#删除 2#里那个斯多 可可 是
采用split如何用正则表达式把拆分成下面的结果:
1998-04-26 08:48:00
博客斯多夫
2#删除
2#里那个斯多
可可

解决方案 »

  1.   

    如果仅是按照空格分隔的话,得不到楼主想要的结果。
    似乎只用正则表达式不能直接得到楼主想要的结果,但由于前面的时间是固定长度的,所以可以先把这个字符串取出来,然后对剩下的部分进行split,或者直接split也行,但把结果的前两项再合并起来。当然,这两种方法都有点BT,呵呵~~
      

  2.   

    就是楼上所说的,那样就可以,单独的分析日期的,要不就试试正则表达式,split方法是不是可以用正则表达式呢?楼下高手回答以下
      

  3.   

    split可以用正则,但是恐怕做不到楼主的要求。
    因为要区分不同位置的空格,就会把空格之外的特征符split没了
      

  4.   

    split 的思路是 "用正则表达式去匹配 分隔符",在楼主的需求中不容易实现,楼主可改用 正则表达式的 find 方法,"匹配 所要的字符",好写一点。推荐楼主参考文章:(推荐)
    http://www.regexlab.com/zh/regref.htm
      

  5.   

    str.split("#'|' | (?!\d\d)");
    可以像你那样分开.
    -----------------
    我的BLOG里有一个正则表达式测试器,会输出split,match的结果,你可以试试.
      

  6.   

    public class Out {
    public static void main(String[] args) {
    String str="#'1998-04-26 08:48:00' 博客斯多夫 2#删除 2#里那个斯多 可可 是";
    String regex="#'|' | (?!\\d\\d)";
    String[] result=str.split(regex);
    for(int i=0;i<result.length;i++){
    System.out.println(result[i]);
    }
    }}
    --------------------------------------
    输出:1998-04-26 08:48:00
    博客斯多夫
    2#删除
    2#里那个斯多
    可可

    ---------
    注意,第一个元素是一个""字符串.
      

  7.   

    呵呵,这样会更好一些,没有漏网之鱼:
    str.split("^#'|(?<=^.{21})'[ ]+|(?<!^.{12})[ ]+")
      

  8.   

    package test;
    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
    public class Regex2 {
    public static void main(String[] args){
    String str="#'1998-04-26 08:48:00' 博客斯多夫 2#删除 2#里那个斯多 可可 是";
    String str1;
    String[] res;
    Pattern p=Pattern.compile("#'([^']*)'\\s(.*)");
    Matcher m=p.matcher(str);
    while(m.find()){
    System.out.println(m.group(1));
    str1=m.group(2);
    res=str1.split("\\s");
    for(int i=0;i<res.length;i++){
    System.out.println(res[i]);
    }
    }
    }
    }------------------------------
    输出:
    1998-04-26 08:48:00
    博客斯多夫
    2#删除
    2#里那个斯多
    可可