如何在Java中为长数据类型构建正则表达式,我目前有3个双精度值的正则表达式作为我的模式:
String pattern = "(max=[0-9]+\\.?[0-9]*) *(total=[0-9]+\\.?[0-9]*) *(free=[0-9]+\\.?[0-9]*)";
我正在使用以下行构建模式:
Pattern a = Pattern.compile("control.avgo:", Pattern.CASE_INSENSITIVE);
我想在文件control.avgo
中匹配下面示例文本中等号后面的数字。
max=259522560, total=39325696, free=17979640
我需要做些什么才能纠正我的代码以匹配它们?
答案 0 :(得分:3)
可能是你真的需要
Pattern a = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
而不是
Pattern a = Pattern.compile("control.avgo:", Pattern.CASE_INSENSITIVE);
因为您当前的代码使用"control.avgo:"
作为正则表达式,而不是您定义的pattern
。
答案 1 :(得分:2)
您需要解决几个错误,包括:
这将有效:
String sPattern = "max=([0-9]+), total=([0-9]+), free=([0-9]+)";
Pattern pattern = Pattern.compile( sPattern, Pattern.CASE_INSENSITIVE );
String source = "control.avgo: max=259522560, total=39325696, free=17979640";
Matcher matcher = pattern.matcher( source );
if ( matcher.find()) {
System.out.println("max=" + matcher.group(1));
System.out.println("total=" + matcher.group(2));
System.out.println("free=" + matcher.group(3));
}
如果要将找到的数字转换为数字类型,请使用Long.valueOf( String )
。
答案 2 :(得分:2)
如果您只需要找到前面带有“=”...
的任何数字String test = "3.control.avgo: max=259522560, total=39325696, free=17979640";
// looks for the "=" sign preceding any numerical sequence of any length
Pattern pattern = Pattern.compile("(?<=\\=)\\d+");
Matcher matcher = pattern.matcher(test);
// keeps on searching until cannot find anymore
while (matcher.find()) {
// prints out whatever found
System.out.println(matcher.group());
}
输出:
259522560
39325696
17979640