如何获得下划线之间的数字?

时间:2011-09-13 20:06:28

标签: java regex string

如果我的密钥具有以下字符序列:_(some number)_1。我怎样才能返回(some number)

例如,如果密钥为_6654_1,我只需要值6654。让我感到困惑的问题/问题是数字可能是_9332123425234_1之类的任何长度,在这种情况下我只需要9332123425234

这是我到目前为止所尝试的内容:

Pattern p = Pattern.compile("_[\\d]_1");
Matcher match = p.matcher(request.getParameter("course_id"));

但这不会涵盖中间数字可以是任何数字(不只是四位数)的情况吗?

4 个答案:

答案 0 :(得分:9)

您可以找出indexOf('_'),然后使用substring。不需要正则表达式。

...但是既然你要求使用正则表达式,那么就去:

import java.util.regex.*;

class Test {
    public static void main(String[] args) {
        String str = "_6654_1";

        Pattern p = Pattern.compile("_(\\d+)_1");
        Matcher m = p.matcher(str);
        if (m.matches())
            System.out.println(m.group(1));  // prints 6654
    }
}

(这里是substring - 用于比较的方法:)

String str = "_6654_1";
String num = str.substring(1, str.indexOf('_', 1));
System.out.println(num);                     // prints 6654

最后的解决方案,使用简单的split("_")

String str = "_6654_1";
System.out.println(str.split("_")[1]);   // prints.... you guessed it: 6654

答案 1 :(得分:3)

你真的需要正则表达式吗?您可以使用substringindexOf

String st = "_9332123425234_1";
String number = st.substring(1,st.indexOf('_',1));

答案 2 :(得分:0)

假设您在数字序列之前和之后都有下划线,您可以使用_(\d+)_创建捕获组。

请参阅http://download.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

答案 3 :(得分:0)

您可能还想考虑使用Splitter:

Splitter

这可能比正则表达式更有效,因为它返回所有元素,您将是元素的前后元素以及中间的数字。所以,如果你最终需要第二个“_”之后的数字,这可能是更好的方法。