如何把如下字符串:“所困多幅#112哭诉大892”中的数字892提取出来。
其中892不一定就是这几个数字,可以是任意0-9的数字,位数也不确定,但这个几个数字之间一定没有其他字符。前面的112不需要取出来。但是前面的112也是不确定的数字,位数也不确定,但是他的前面一定有个#。现在就是要怎么样才能把这个892这个位置上的数字取出来。
字符串举例:所困多幅#112哭诉大892
算幅#22锁诉大3222
锁定#4大330现在就是怎么把这样的字符串中的892,3222,330取出来。

解决方案 »

  1.   

    String str = "算幅#22锁诉大3222所困多幅#112哭诉大892";
    Pattern p = Pattern.compile("(?<!#|\\d)\\d+");
    Matcher m = p.matcher(str);
    while (m.find()) {
    System.out.println(m.group());
    }
      

  2.   

    补充:
    如何把如下字符串:“120kV所困2Y多2X幅#112哭诉大892”中的数字892提取出来,也要把120kV取出来,也要把2Y,2X取出来,
    其中892不一定就是这几个数字,可以是任意0-9的数字,位数也不确定,但这个几个数字之间一定没有其他字符。前面的112不需要取出来。但是前面的112也是不确定的数字,位数也不确定,但是他的前面一定有个#。现在就是要怎么样才能把这个892这个位置上的数字取出来。
    字符串举例:120kV所困2Y多2X幅#112哭诉大892
    112kv算3y幅sd2x#22锁诉大3222
    300Kv锁32Y定#4大330现在就是怎么把这样的字符串中的120kV,2Y,2X,892,3222,330这些位置上的值取出来。
      

  3.   

    更改需求:
    如何把如下字符串:“120kV所困2Y多2K幅#11哭诉大892”
    其中需要取出的有:2Y,2K,892
    120这个数字也是不确定的,但是后面一定有kv字符,但kv字符大小写不确定。
    2Y这个值一定是两位,前面是0-9的数字,后面一定是大写Y
    2K这个值一定是两位,前面是0-9的数字,后面一定是大写K
    #11这个值前面不一定有#号,但是后面的数字一定是小于2位的
    892这个值就是任意位数的数字,数字直接没有任何其他字符。
    现在就是要取出来,2Y,2K,892这样的值,其他的都不要
      

  4.   

    规则就是:1数字+K  或  1数字+Y   或  n数字  ,对吗?正则表达式可以(有好多种可匹配的方式)是:\d(K|Y|\d+)
    String p="\\d(K|Y|\\d+)";
      

  5.   

    CrazyGou写的差不多,但是还要去掉120kV,要取出2K
    比如字符串:220kV算幅#22锁2K诉大322
    最后结果是得到2K和322
    比如字符串:20kV算幅#2锁22Y诉大1121
    得到结果:22Y 和322
      

  6.   

    >2Y这个值一定是两位,前面是0-9的数字,后面一定是大写Y
    >得到结果:22Y 和322
    -------
    矛盾>#11这个值前面不一定有#号,但是后面的数字一定是小于2位的
    >892这个值就是任意位数的数字,数字直接没有任何其他字符。
    --------
    矛盾
      

  7.   

    厄220kV算2Kv幅2K啊22K#22抗22击2Y非333典2y声22Y卡锁诉2大32
    ----------
    上面的字符串你想提取哪些?
      

  8.   

    取2K,333,2y,22Y这些,小于等于2位的数字不要
      

  9.   

    String str = "120kV所困2Y多2K幅#11哭诉大892";
    String pat = "(\\d+[kK][vV]|\\d[KY]|(?<!#)\\d{2,})";
    Pattern p = Pattern.compile(pat);
    Matcher m = p.matcher(str);

    while(m.find()){
    System.out.println(m.group(1));

    }
    ---------------------------------
    就能想到这里了,你再把带kv的去掉.期待好的解决方法.
      

  10.   

    //昏,不明白你要什么,随便写了一个。不当之处请高手赐教 :)
    //+换成{1,n}可将ky前面数字限制为n位以内。若只要ky大写将前面两处:[yY]和[Kk]改为Y和K即可
    String str = "厄220kV算2Kv幅2K啊22K#22抗22击2Y非333典2y声22Y卡锁诉2大32";
    Pattern p = Pattern.compile("(?<!#|\\d)(?:\\d+(?:[yY]|[Kk](?![vV])))|\\d{3,}(?![kK][vV])");
    Matcher m = p.matcher(str);
    while (m.find()) {
    System.out.println(m.group());
    }
      

  11.   

    GrazyGou这次写的基本上差不多了。
    如字符串:120kV所困2Y幅#1139哭诉大191
    用你这个表达式,得到的结果是2Y,1139,191
    现在想要的结果是2Y,191
    也就是,如果有数字前面有#号,那么也不要取这个数字
      

  12.   

    晕,丢了一个括号:
    Pattern p = Pattern.compile("(?<!#|\\d)((?:\\d+(?:[yY]|[Kk](?![vV])))|\\d{3,}(?![kK][vV]))");
      

  13.   

    再改一下。其他需求,按我上面的说明改就行了
    Pattern p = Pattern.compile("(?<!#|\\d)(?:(?:\\d+(?:[yY]|[Kk](?![vV])))|\\d{3,}(?![kK][vV]))");