Java Regex получить все числа - PullRequest
0 голосов
/ 03 марта 2020

Мне нужно получить все числа из строки, например:

"a: 1 | b=2 ; c=3.2 / d=4,2"

Я хочу получить такой результат:

  • 1
  • 2
  • 3.2
  • 4,2

Итак, я не знаю, как сказать, что в Regex на Java.

На самом деле, у меня есть это:

(?<=\D)(?=\d)|(?<=\d)(?=\D)

Он разделяет буквы и цифры (но двойное значение не соблюдается), и в результате получается:

  • 1
  • 2
  • 3
  • 2 (проблема)
  • 4
  • 2 (проблема)

Вы можете мне помочь?

Спасибо: D

Ответы [ 4 ]

2 голосов
/ 03 марта 2020

Вы можете использовать группу захвата с классом символов :

[a-z][:=]\h*(\d+(?:[.,]\d+)?)

Объяснение

  • [a-z] Граница слова , соответствует символу az
  • [:=] Соответствует либо :, либо =
  • \h* Соответствие 0+ горизонтальным пробелам
  • ( Capture группа 1
    • \d+(?:[.,]\d+)? Совпадение цифр 1+ с необязательной десятичной частью с . или ,
  • ) Закрыть группу

Regex demo | Java демо

Например

String regex = "[a-z][:=]\\h*(\\d+(?:[.,]\\d+)?)";
String string = "a: 1 | b=2 ; c=3.2 / d=4,2";

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

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

Выход

1
2
3.2
4,2
1 голос
/ 03 марта 2020

Вы можете сделать это следующим образом:

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

public class Main {
    public static void main(String[] args) throws InterruptedException {
        // Test
        String s = "a: 1 | b=2 ; c=3.2 / d=4,2";
        showNumbers(s);
    }

    static void showNumbers(String s) {
        Pattern regex = Pattern.compile("\\d[\\d,.]*");
        Matcher matcher = regex.matcher(s);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

Вывод:

1
2
3.2
4,2
1 голос
/ 03 марта 2020

Вы можете использовать

/\d+(?:[.,]\d+)?/g

демо

0 голосов
/ 03 марта 2020

Возможно, вам понадобится регулярное выражение типа (\d(?:[.,]\d)?), которое

  • может найти ди git
  • в конце концов точку / запятую + другие ди git после

Multi-Di git версия (\d+(?:[.,]\d+)?)

String value = "a: 1 | b=2 ; c=3.2 / d=4,2";
Pattern p = Pattern.compile("(\\d(?:[.,]\\d)?)");
Matcher m = p.matcher(value);
while (m.find()) {
    System.out.println(m.group());
}
//        1
//        2
//        3.2
//        4,2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...