Регулярное выражение для получения положительного числа - PullRequest
3 голосов
/ 06 мая 2020

У меня есть строка, которая содержит число между ними, и я хочу получить все числа из этой строки, для этого у меня есть это регулярное выражение (\ d +), но оно не служит цели.

enter image description here

Я также хочу включить те, которые упомянуты в красном квадрате, что мне нужно изменить в регулярном выражении.

Изменить: Соответствующий код

String regex = "( \\d+ )";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(textView.getText());

        while (m.find()) {
            String number = m.group().replace(" ", "");
            WAAFILogger.d("Number-regex", ":"+number+":");
            int startIndex = messageText.indexOf(number);
            int endIndex = startIndex + number.length() - 1;

            builder.setSpan(message.getSpannableListenerForNumber(number),
                    startIndex,
                    endIndex + 1,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            textView.setMovementMethod(LinkMovementMethod.getInstance());

        }

1 Ответ

1 голос
/ 06 мая 2020

Вы можете использовать любой из двух:

\+?\b\d+(?!\S)
\+?(?<!\d|\d\.)\d+(?!\.?\d)

См. демонстрацию регулярного выражения # 1 и демонстрацию регулярного выражения # 2 . Подробности:

  • \+? - необязательный знак +
  • \b - граница слова
  • (?<!\d|\d\.) - отрицательный просмотр назад, который не соответствует если слева от текущего местоположения стоит di git или di git + .
  • \d+ - 1+ цифр
  • (?!\S) - отрицательный упреждающий просмотр, который не соответствует совпадению, если справа от текущего местоположения нет непробельного символа
  • (?!\.?\d) - отрицательный просмотр вперед, который не соответствует совпадению, если есть необязательные . и ди git сразу справа от текущего местоположения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...