javabird1986 2013-06-20 12:43
浏览 235
已采纳

字符串用正则替换

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=测试一部,ou=测试机构1,ou=湖北省
需要变为:湖北省->测试机构1->测试一部->测试用户1。
希望平时正则用的多的同学帮一把,谢谢。

用java语法实现~

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2013-06-20 13:36
    关注

    [code="java"]public static void main(String[] args) {
    String s= "cn=测试用户1,ou=测试机构1,ou=湖北省,ou=org,o=essp,c=cn";
    // String s= "cn=测试用户1,ou=测试一部,ou=测试机构1, ou=湖北省 ";
    String cnPattern = "cn=(.*?)\s*,.*";
    String ouPattern = "ou=([^, (org)]*)";

        List<String> result = new ArrayList<String>();
    
        Matcher cnMatcher = Pattern.compile(cnPattern).matcher(s);
        if(cnMatcher.find()) {
            result.add(cnMatcher.group(1));
        }
    
        Matcher ouMatcher = Pattern.compile(ouPattern).matcher(s);
    
        int start = 0;
        while(ouMatcher.find(start)) {
            String ou = ouMatcher.group(1);
            if(ou.length() > 0) {
                result.add(ou);
            }
            start = ouMatcher.start() + 1;
        }
    
        StringBuilder sb = new StringBuilder();
    
        for (int l = result.size(), i = l - 1; i >= 0; i--) {
            String s1 = result.get(i);
            if(i != l - 1) {
                sb.append("-->");
            }
            sb.append(s1);
        }
    
        System.out.println(sb.toString());
    
    }[/code]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?