有一个字符串abc_jldef_lldegde,我要把以_开头然后接着两个任意字符的de替换成xx,即变成abc_jlxxf_llxxgde请问用正则表达式应该怎么做?

解决方案 »

  1.   

    String s ="abc_jldef_lldegde";
    Pattern p = Pattern.compile("_[^_]*de*.(?=[_]|$|//z)");
    Matcher m = p.matcher(s);
    while(m.find()){
    s = s.substring(0,m.start())+m.group().replace("de","xx");//s = abc_jlxxf_llxxgxx
    }//s = abc_jlxxf_llxxgxx
      

  2.   

    不对啊,结果应该是s = abc_jlxxf_llxxgde,不是s = abc_jlxxf_llxxgxx;最后的“de”不应该被替换
      

  3.   

    s = s.substring(0,m.start())+m.group().replaceFirst("de","xx");用这个就可以了
    正则表达式功能真是强大啊
      

  4.   

    不好意思还是不行要是abc_jldef_dedegde的话
    得到:abc_jlxxf_xxdegde
      

  5.   

    哦,对不起,是接着两个任意字符的de替换成xx
    正则:
    Pattern p = Pattern.compile("_[^_]*(\\w{2})de*.(?=[_]|$|//z)");
    替换的话写个小小的函数决可以了
      

  6.   

    提供一个函数:
    public static String ReplaceString(String originalString,String replaceString){
    return originalString.substring(0,3)+replaceString+originalString.substring(3+replaceString.length());
    }
    //使用:
    s = s.substring(0,m.start())+ReplaceString(m.group(),"xx");
    //前提是接着两个任意字符的de
      

  7.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;;
    public class class1 { public static void main(String[] args) {
    String s ="abc_jldef_lldegde";
    Pattern p = Pattern.compile("_[^_]{2}(de)"); Matcher m = p.matcher(s);
    while(m.find()){
    s = s.substring(0,m.start()+m.group().lastIndexOf("de")) +
    "xx" + s.substring(m.end(),s.length());
    }
    System.out.print(s);
    }}
      

  8.   

    String org = "abc_jldef_lldegde";
    System.out.println(org.replaceAll("(_)\\w{2}","$1de"));
      

  9.   

    Sorry,看错~
      String org = "abc_jldef_lldegde";
            System.out.println(org.replaceAll("(_\\w{2})\\w{2}","$1xx"));
      

  10.   

    (_..)de=>$1xx测试工具:http://www.regexlab.com/zh/replshop.asp?pat=%28_..%29de&rto=%241xx&txt=abc_jldef_lldegde