Regex, чтобы найти значение правильно отформатирован - PullRequest
0 голосов
/ 07 июня 2019

У меня есть строка, как показано ниже

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

Исходя из этого, как я могу убедиться, что значение LoadAvg правильно отформатировано. Я имел в виду, что он печатает как 3 десятичных значения

Есть ли возможность найти с помощью REgex?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Мне кажется, что здесь мы хотели бы иметь только 6 цифр для части с плавающей запятой, тогда мы бы начали с:

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

Демо 1

или:

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

Демонстрация 2

Если квантор 6 не требуется, мы упростим его до:

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

Демонстрация 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 Circuit

jex.im визуализирует регулярные выражения:

enter image description here

1 голос
/ 07 июня 2019

Вы можете попробовать использовать следующее регулярное выражение:

\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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...