求一个正规表达式,删除字符串中的数字和符号,用空隔代替,但是如果是汉字的电码\0000-\9999不能删除。例如:"abc11,cd123 \0123"  删除后 应该是 "abc   cd    \0123"

解决方案 »

  1.   


    String s ="abc11,cd123 \1123";
    String s2 = s.replaceAll("[[0-9]+]|[^\\w]", " ");
    System.out.println(s);
    System.out.println(s2);结果:
    abc11,cd123 J3
    abc   cd    J 
    \112代表是一个8进制数,十进制值为74,是字母J
      

  2.   

    有难度,关键是String把\1123中的\112解释为一个字符了。
      

  3.   

    "abc11,cd123 \\0123" 电码加个转义符呢
      

  4.   

    Please try this:
    public static void main(String[] args) throws Exception{
        String s ="abc11,cd123 \\1123";
        String s2 = s.replaceAll("(?<!\\\\(\\d{0,3}))[0-9]+|[,;:\\.\\?\\+\\-]", " ");
        System.out.println(s);
        System.out.println(s2);
    }
      

  5.   


    public static void main(String[] args) throws Exception{
        String s ="abc11,cd123 \\1123";
        String s2 = s.replaceAll("(?<!\\\\)[0-9]*\\W", " ");
        System.out.println(s);
        System.out.println(s2);
    }结果:
    abc11,cd123 \1123
    abc cd  1123
      

  6.   

    String s = "abc11,cd123 \\0123";
    s = s.replaceAll("([^\\\\\\d]+)\\d+", "$1");
    System.out.println(s);
      

  7.   

    我想出了一个完全满足你的要求的表达式,既可以替换掉都好也可以替换到非\开头的数字: String s5 = "abc11,cd123 \\0123,68,T5699";
    String s6 = s5.replaceAll("\\W*(?<![\\\\\\\\\\d])([0-9]+){1,}\\W?", " ");
    System.out.println(s5);
    System.out.println(s6);结果:
    abc11,cd123 \0123,68,T5699
    abc cd \0123 T