Использование регулярного выражения для получения определенного значения - PullRequest
0 голосов
/ 07 августа 2020

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

2020 Aug 05 09:31:25.646515 arrisxg1v4 WPEWebProcess[22024]: [AAMP-PLAYER]NotifyBitRateChangeEvent :: bitrate:2800000 desc:BitrateChanged - Network adaptation width:1280 height:720 fps:25.000000 position:256.000000

Из этого, используя регулярное выражение, я могу получить значение позиции только как целое число. Используя код java, я могу получить его с помощью метода .split. Но как я могу получить это значение 256 с помощью Regex?

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Попробуйте этот однострочник:

String positionStr = str.replaceAll("(?:(?!position:).)*(?:position:(\\d+))?.*", "$1");
Integer position = positionStr.isEmpty() ? null : new Integer(positionStr);

Это регулярное выражение соответствует всей строке, захватывает значение целевой позиции в группе 1 ((?:...) - это группа без захвата) и заменяет совпадение ( ie все) с захваченной группой. Это эффективно удаляет все, что вы не хотите.

Удобно, потому что захват не является обязательным (имеет квантификатор ?), если вход не имеют значение position:, результатом является пустая строка.

Отрицательный прогноз (?!position:). предотвращает прохождение точки мимо нашей цели. Без отрицательного просмотра вперед первая точка будет занимать весь ввод.

1 голос
/ 07 августа 2020

Вы можете попробовать что-то вроде этого:

Pattern pattern = Pattern.compile(".*position:(\\d+(\\.\\d+))");
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
   String position = matcher.group(1);
}

В основном это выражение говорит следующее:

  • Принять все, что угодно, вплоть до слова position
  • Примите двоеточие :
  • Примите 1 или более цифр (0–9), за которыми может следовать точка и 1 или более цифр

Затем, используя matcher.group, вы берете все в круглых скобках, начиная с первой скобки слева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...