如何使用正则表达式java提取值?

时间:2010-08-29 06:38:09

标签: java regex

我需要从这个文本中单独提取数字我使用子字符串提取细节有时候数字减少所以我得到一个错误值......

 example(16656);

4 个答案:

答案 0 :(得分:3)

使用Pattern编译正则表达式,使用Matcher获取特定的捕获组。我正在使用的正则表达式是:

example\((\d+)\)

用于捕获括号内的数字(\d+)。所以:

Pattern p = Pattern.compile("example\\((\\d+)\\)");
Matcher m = p.matcher(text);
if (m.find()) {
  int i = Integer.valueOf(m.group(1));
  ...
}

答案 1 :(得分:0)

在这里查看Java Regular Expression示例:

http://java.sun.com/developer/technicalArticles/releases/1.4regex/

特别关注查找方法。

答案 2 :(得分:0)

String yourString = "example(16656);";

Pattern pattern = Pattern.compile("\\w+\\((\\d+)\\);");
Matcher matcher = pattern.matcher(yourString);
if (matcher.matches())
{
    int value = Integer.parseInt(matcher.group(1));
    System.out.println("Your number: " + value);
}

答案 3 :(得分:0)

我建议你编写自己的逻辑来做到这一点。使用来自Java的模式和匹配器是很好的做法,但这些都是标准的解决方案,可能不适合作为有效方式的解决方案。就像cletus提供了一个非常简洁的解决方案,但在这个逻辑中发生的是在后台执行子串匹配算法来跟踪数字。我想你不需要在这里找到模式。你只需要从字符串中提取数字(比如“a1b2c3”中的123)。参见下面的代码,它在O(n)中以干净的方式执行,并且不会像Pattern和Matcher类那样执行不必要的额外操作(只需复制并粘贴并运行:)):

公共类DigitExtractor {

/**
 * @param args
 */
public static void main(String[] args) {

    String sample = "sdhj12jhj345jhh6mk7mkl8mlkmlk9knkn0";

    String digits = getDigits(sample);

    System.out.println(digits);
}

private static String getDigits(String sample) {

    StringBuilder out = new StringBuilder(10);

    int stringLength = sample.length();

    for(int i = 0; i <stringLength ; i++)
    {
        char currentChar = sample.charAt(i);
        int charDiff = currentChar -'0';

        boolean isDigit = ((9-charDiff)>=0&& (9-charDiff <=9));

        if(isDigit)
            out.append(currentChar);

    }

    return out.toString();
}

}