正则表达式以找到正确格式的值

时间:2019-06-07 04:06:53

标签: java regex

我有一个像下面这样的字符串

"LoadAvg":"1.895020 1.334473 0.971680" or  "LoadAvg":"3.895020 4.334473 8.771680"

由此,我如何确保LoadAvg值的格式正确。我的意思是,它打印的像是三个十进制值

是否有可能使用REgex查找?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用以下正则表达式:

\d+(?:\.\d+)(?: \d+(?:\.\d+)){2}

这将连续匹配三个十进制数字,并用一个空格分隔。如果您想允许不带小数部分的整数,请改用以下模式:

\d+(?:\.\d+)?(?: \d+(?:\.\d+)?){2}

示例脚本:

String loadAvg = "1.895020 1.334473 0.971680";
if (loadAvg.matches("\\d+(?:\\.\\d+)(?: \\d+(?:\\.\\d+)){2}")) {
    System.out.println("MATCH");
}

答案 1 :(得分:1)

在我看来,在这里我们只希望浮点数只有6位数字,那么我们将开始于:

"LoadAvg":"([0-9]+\.[0-9]{6}\s[0-9]+\.[0-9]{6}\s[0-9]+\.[0-9]{6})"

Demo 1

或:

 ([0-9]+\.[0-9]{6}\s[0-9]+\.[0-9]{6}\s[0-9]+\.[0-9]{6})

Demo 2

如果不需要6量词,我们将其简化为:

([0-9]+\.[0-9]+\s[0-9]+\.[0-9]+\s[0-9]+\.[0-9]+)

Demo 3

测试

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

final String regex = "([0-9]+\\.[0-9]{6}\\s[0-9]+\\.[0-9]{6}\\s[0-9]+\\.[0-9]{6})";
final String string = "1.895020 1.334473 0.971680\n"
     + "3.895020 4.334473 8.771680";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

RegEx电路

jex.im可视化正则表达式:

enter image description here