正则表达式用于获取两个单词之间的数字

时间:2013-12-12 18:01:09

标签: java regex string between

我正在尝试从下面的字符串中提取数字/字 84900 ,关键字是HEIGHT& CM。

String s ="I am with weight 600 KG AND HEIGHT 84900 CM";

另外:如果我想从一个字符串中提取多个单词,那么可以做什么。对于eg2:在2030年订购的项目是5620 POUNDS,我需要提取OR​​DERED,2030,5620

请给我一个java正则表达式的解决方案。 感谢

3 个答案:

答案 0 :(得分:0)

您可以使用[0-9]+查找一个或多个号码。

    String  k ="I am with weight 600 KG AND HEIGHT 84900 CM";
    Pattern p = Pattern.compile("[0-9]+");
    Matcher m = p.matcher(k);
    while(m.find()){
        System.out.println(m.group());
    }

输出

600
84900

修改

为此,您需要将正则表达式更改为(?<=HEIGHT )[0-9]+(?= CM)

enter image description here

答案 1 :(得分:0)

HEIGHT\s([0-9]*)\sCM

会这样做 - 但它非常具体

编辑。 没看到它是java 使用+而不是*

答案 2 :(得分:0)

要了解如何执行此操作,您应该阅读Java API中正则表达式的文档 - 特别是在“特殊构造(命名捕获和非捕获)”部分。此处的任何示例都将特定于您指定的用例,但通常不适用。因此,这个问题对于可能偶然发现它的其他人没有用。但是这里有一个SSCCE,它将为您提供这个特定用例的答案。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * http://stackoverflow.com/questions/20550821/regular-expression-for-getting-number-between-two-words
 */
public class Main {
    public static void main(String[] args) {
        String testString = "I am with weight 600 KG AND HEIGHT 84900 CM";
        Pattern pattern = Pattern.compile("(?<=HEIGHT)\\s*([0-9]+)\\s*(?=CM)");
        Matcher matcher = pattern.matcher(testString);
        while(matcher.find()){
            System.out.println("Height: '" + matcher.group(1) + "'");
        }
    }
}