Java 如何构建正则表达式以匹配这些“long”值?

Java 如何构建正则表达式以匹配这些“long”值?,java,regex,Java,Regex,如何在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); 我想匹配下面示例文本中等号后面的数字,

如何在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

我需要做些什么来更正代码以匹配它们呢?

您真的需要吗

Pattern a = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
而不是

Pattern a = Pattern.compile("control.avgo:", Pattern.CASE_INSENSITIVE);

因为您当前的代码使用
“control.avgo:”
作为正则表达式,而不是您定义的
模式。

您需要解决几个错误,包括:

  • 您的模式指定实数,但您的问题要求使用长整数
  • 您的模式会忽略正在搜索的字符串中的逗号
  • Pattern.compile()的第一个参数是正则表达式,而不是正在搜索的字符串
这将有助于:

    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)

以防只需要找到前面有“=”的数字


对不起,我听不懂你的文字。你能清楚地显示一个示例输入,并清楚地表明你想要输出什么吗?好的,第三行是一个txt文件的输出。正则表达式最初找到control.avgo:行,然后正则表达式找到该行的其余部分,以便提取变量。“放置我的模式似乎不起作用。@这可能是因为您只需要从任何文本中提取双值吗?为什么不在
上拆分
,“
,然后在
”=“
”上拆分每个结果元素?非常感谢所有响应者将投票给每个人,因为只要选择一个就行了!”!好的,我现在将实现它以进行测试。
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