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 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题