String s= "cn=测试用户1,ou=测试机构1,ou=湖北省,ou=org,o=essp,c=cn";
我想把上面的字符串用正则替换为:
湖北省->测试机构1->测试用户1需求是:ou=org,o=essp,c=cn可以直接去掉(当然ou=org,o=essp,c=cn之间可能是有空格的)
但ou=xxx的数量是可变的,如字符串也可能是这样:cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省
需要变为:湖北省->测试机构1->测试一部->测试用户1。
希望平时正则用的多的同学帮一把,谢谢。用java语法实现~正则表达式String

解决方案 »

  1.   

    看第一个字符串和结果,感觉是想逆序输出。但是第二个字符串
    ou=测试机构1,ou=测试一部有啥区别么?为啥结果不是:湖北省->测试一部->测试机构1->测试用户1请给出明确的规则
      

  2.   


    需求是是去掉结尾的一串英文,然后把剩下的倒序
    这个规律性还是挺清晰的,如果不存在其它干扰字符,可以用字符串拼接实现:    public static void main(String[] args)
        {
            //目标字符串
            String s = "cn=测试用户1,ou=测试一部,ou=测试机构1,ou=湖北省";        //无用字符存储器//如果是要求所有不能包含字母,就用正则式实现
            List<String> noUseStrs = new ArrayList<String>();
            noUseStrs.add("org");
            noUseStrs.add("essp");
            noUseStrs.add("cn");        //将所有的空格去掉
            s = s.replaceAll("\\s", "");
            System.out.println("去空格后:" + s);
            String[] firstStepStrs = s.split(",");        //存放列表
            List<String> allStrs = new ArrayList<String>();
            String temp;
            //循环分离的内容
            for (String contex : firstStepStrs)
            {
                if (contex.indexOf("=") < 0)
                {
                    continue;
                }            temp = contex.split("=")[1];            if (noUseStrs.contains(temp))
                {
                    continue;
                }
                allStrs.add(temp);
            }        //逆序拼接结果
            StringBuilder sb = new StringBuilder();
            for (int index = allStrs.size() - 1; index > 0; index--)
            {
                sb.append(allStrs.get(index));
                sb.append("->");
            }
            sb.append(allStrs.get(0));        System.out.println("最終結果:" + sb);    }
    如果存在干扰字符,建议给个更典型的样例吧~
      

  3.   


    public static void main(String args[])
    {
    String s= "cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省";
    Pattern pat = Pattern.compile("(?:([\\w]+)=([^=,]+))+\\,?", Pattern.DOTALL);
    Matcher mat = pat.matcher(s);
    while (mat.find()) {
    String tag = mat.group(1);
    String value = mat.group(2);
    }
    }
      

  4.   

    6L V5~,简化下正则:        //目标字符串
            String s= "cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省,cn=com";
            Pattern pat = Pattern.compile("=([^=,]+)");
            Matcher mat = pat.matcher(s);
            while (mat.find()) {
                String tag = mat.group(1);
                System.out.println("value:"+tag);
            }
      

  5.   

    谢谢上面朋友的回答,我自己又整理了一下,得出了我的最终方法:public class ZZTest {
    public static void main(String[] args) {
    //目标字符串
            //String s= "cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省,cn=com";
    String s= "cn=测试用户1,ou=测试机构1,ou=湖北省,ou=org,o=essp,c=cn";
            Pattern pat = Pattern.compile("=([^=,\\w]+)");
            Matcher mat = pat.matcher(s);
            List<String> alist = new ArrayList<String>();
            while (mat.find()) {
                String tag = mat.group(1);
                System.out.println("value:"+tag);
                alist.add(tag);
            }
            StringBuilder sb = new StringBuilder();
            for(int len = alist.size() , i = len-1 ; i >= 1 ; i--){
             sb.append(alist.get(i));
             sb.append("→");
            }
            sb.append(alist.get(0));
            System.out.println(sb.toString());
    }
    }如果没异议我就结贴给分了