我正在尝试从下面的字符串中提取数字/字 84900 ,关键字是HEIGHT& CM。
String s ="I am with weight 600 KG AND HEIGHT 84900 CM";
另外:如果我想从一个字符串中提取多个单词,那么可以做什么。对于eg2:在2030年订购的项目是5620 POUNDS,我需要提取ORDERED,2030,5620
请给我一个java正则表达式的解决方案。 感谢
答案 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)
答案 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) + "'");
}
}
}