Если у вас есть два числа с плавающей точкой в вашей строке, вы можете создать регулярное выражение, которое захватит оба числа с плавающей точкой в две разные группы захвата, как, например, следующее регулярное выражение,
(\d+\.\d+).*(\d+\.\d+)
И затем получить доступ к обоим совпадениямиспользуя matcher.group(1)
и matcher.group(2)
Проверьте ваш измененный код Java,
String body = "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Live Life the EcoCash Way.";
String regex = "(\\d+\\.\\d+).*(\\d+\\.\\d+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(body);
while (matcher.find()) {
System.out.println("First float: " + matcher.group(1) + ", Second float: " + matcher.group(2));
}
Prints,
First float: 1.00, Second float: 1.04
Если в вашей строке много чисел с плавающей запятойвам, возможно, придется настроить регулярное выражение для использования .*?
вместо .*
для захвата ближайших соседних чисел с плавающей запятой или способа, которым вы хотите их захватывать.
Кроме того, скобки в вашем регулярном выражении излишни, если вызаключают в них весь ваш образец.Следовательно, ([0-9]+[.][0-9]+)
и [0-9]+[.][0-9]+
почти одинаковы, потому что вам не нужно использовать группы захвата, когда ваша группа захвата точно соответствует целиком.Таким образом, вы можете удалить их, а также, в своем коде вы фактически не использовали захват группы, как я делал в своем коде.Когда вы получаете доступ к совпадению с помощью matcher.group()
, он дает вам полное совпадение, а когда вы получаете доступ с использованием matcher.group(1)
, тогда он дает вам текст, захваченный первой группой, но, как и в вашем случае, и matcher.group()
, и matcher.group(1)
будут одинаковыми дляпричины, упомянутые выше.