2016-10-16 5 views
2

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

String realNumber = "[+-]?[\\d]+(?:[\\.][\\d]+)?"; 
s.next(realNumber + "[\\s]+" + realNumber); 

Полное регулярное выражение:

[+-]?[\\d]+(?:[\\.][\\d]+)?[\\s]+[+-]?[\\d]+(?:[\\.][\\d]+)? 

Это не работает. Если я использую s.next(realNumber);, он отлично работает для одного действительного числа, то есть 321.1 или 12 и т. Д. Пространство - это часть, которая, похоже, исключает исключение несоответствия.

Я пытался заставить это работать в течение последнего часа сейчас>.> Пожалуйста, помогите!

Patterns, которое должно соответствовать:

1 1 
1.1 2.1 
123 1.123 
123.123 1 

Я получил его, чтобы успешно работать на regex101.com: https://regex101.com/r/fM7uA5/100, но он по-прежнему бросает исключение в Java.

+0

Кроме того, вам не нужны классы символов, если есть только одна вещь. Например. '[\\ d]' совпадает с '\\ d'. –

+0

Попробуйте ускользнуть от '-' в классе символов' [+ -] '. Обычно он используется для обозначения диапазона. –

+0

@ AndyTurner Я нахожу, что квадратные скобки вокруг персонажа облегчают чтение. Также '-' в' [+ -] ', кажется, работает нормально, вы поднимаете действительную точку, но' [\\ s] 'кажется виновником в этом случае. – ChickenFeet

ответ

0

EDIT: После того, как вы уточните, что хотите извлечь два реала (для простое тестирование см. Более эффективное решение ниже).

Для захвата и извлечения реалов, используйте это регулярное выражение: "([+\-]{0,1}[\d]+(?:\.[\\d]+)*)"


Для тестирования, попробуйте это регулярное выражение: ^(?:[+\-]{0,1}[\d]+(?:\.[\d]+)*\s*){2}$. Это эффективно работает для тестирования!

+0

Это также работает для одного действительного числа, должно быть ровно два действительных числа. У меня есть пример здесь: https://www.regex101.com/r/EwqLNO/6 – ChickenFeet

+0

@ChickenFeet У этого есть два вопроса ... – prakharsingh95

+0

Однако пример имеет дополнительное пространство - пространство должно быть обязательным. Если я использую '\ s +', это не работает по какой-то причине. Есть идеи? – ChickenFeet

0

Так что не совсем то, чем я был, но Java отказался вести себя. Таким образом, работа заключается в следующем:

double x, y; 
String realNumber = "[+-]?[\\d]+(?:[\\.][\\d]+)?"; 
x = Double.valueOf(s.next(realNumber)); 
y = Double.valueOf(s.next(realNumber)); 
+1

Вы должны были уточнить, что это то, что вы хотели. Я обновил свой Java-код, имея хороший способ проверить и извлечь реальные цифры. – prakharsingh95

+0

Первоначально я не хотел извлекать два реала. Я хотел вернуть строку, а затем извлечь из строки с помощью метода split (""). – ChickenFeet

Смежные вопросы