原始字符串wcdma:OMMOID=g0uj599c-1@sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1要求通过正则表达式能够把字符串sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1等号后面的数字一次性提取出来,提取出来后可以形成1101 1101 2 2 3 1这样的格式,要求直接用原始串和正则表达式匹配后结果就是1101 1101 2 2 3 1或者匹配后用group的方式获取到每个值也行,请各位高人指教,高分相送。原始字符串等号前面的字符串是变的,只有等号和逗号是固定格式,希望正则表达式是个通用的

解决方案 »

  1.   


    String str = "wcdma:OMMOID=g0uj599c-1@sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1";
    String regex = "(?<==)\\d+";
    Pattern pattern1 = Pattern.compile(regex);
    Matcher matcher = pattern1.matcher(str);
    String result = "";
    while (matcher.find()) {
    result = matcher.group();
    System.out.println(result);
    }1101
    1101
    1101
    2
    2
    3
    1
    不知道是不是你想要的
      

  2.   

    String s="wcdma:OMMOID=g0uj599c-1@sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1";
    Matcher m=Pattern.compile("\\d+").matcher(s.substring(s.indexOf("sbn=")));
    String end="";
    while(m.find()){
    end+=m.group()+" ";
    }
    end=end.trim();
    System.out.println(end);
      

  3.   

    或者String regex = "(?<=(me=|EQRNCID=|RACKNO=|SHELFNO=|SLOTNO=|CPU=))\\d+";由你来指定提取哪些值,不过这样会写死了,不太灵活
      

  4.   

    优化一下:String regex = "(?<=(me|EQRNCID|RACKNO|SHELFNO|SLOTNO|CPU)=)\\d+";
      

  5.   


    String str = "wcdma:OMMOID=g0uj599c-1@sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1";
    Matcher m = Pattern.compile("(\\w+=)(\\d+)").matcher(str); 
    while(m.find()){
    System.out.println(m.group(2));
    }
      

  6.   

    多谢楼上的兄弟指教,假设 wcdma:OMMOID=g0uj599c-1@sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1 只需要提取me=1101 RACKNO=2 CPU=1等号后面的数字,又如何写呢?就是只提取某几个等号后面的数字,不能用枚举的方式把等号前面的内容写出来。
      

  7.   

    根据你的这个例子,可以先用String.split("@")方法来切割字符串来获取“me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1”,至于接下来怎么办,还取决于你这个字符串是不是只有这些字段了,还会有别的字段吗?
      

  8.   

    取me=1101 RACKNO=2 CPU=1后的数字String str = "wcdma:OMMOID=g0uj599c-1@sbn=1101@me=1101,EQRNCID=1101,RACKNO=2,SHELFNO=2,SLOTNO=3,CPU=1";
    Matcher m = Pattern.compile("(\\w+)=(\\d+)").matcher(str); 
    String str2 = "me,RACKNO,CPU";
    while(m.find()){
    if(str2.indexOf(m.group(1)) != -1)
    System.out.println(m.group(2));
    }
      

  9.   

    楼上的方法提取出来后可以放在Map里面,要那个取那个