изменить регулярное выражение, чтобы разрешить число с плавающей точкой - PullRequest
0 голосов
/ 26 декабря 2011

Я имел в своем коде, среди других шаблонов, этот, чтобы идентифицировать целые числа

Pattern patternNumber = Pattern.compile("[0-9]+");

Чтобы прочитать ввод, я использовал *:

 String input = "x: 1.6 ..10;";
 String[] meta = a.split("(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b");

* Предоставленото, что я нашел здесь , немного изменено, чтобы соответствовать.У меня нет большого опыта работы с Regex, но эта строка волшебным образом сработала для меня.

Затем я перешел к добавлению чисел с плавающей запятой:

Pattern patternNumber = Pattern.compile("\\d*\\.\\d+|\\d+");

Но теперь я могупохоже, это не работает.Для части с плавающей точкой она разбивает число, давая мне:

1  
.  
6

И что я хочу:

1.6

Я обнаружил, что это работает, если я использую только:

 String input = "1.6";
 String[] meta = a.split("\\D\\.\\D");

Есть идеи, как заставить эту часть работать с остальной частью выражения в методе split?

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Я думаю, что split - не лучший инструмент для ваших целей.

split будет разбивать вашу входную строку в вашем регулярном выражении.Например, если вы сделаете split на 1,2,3,apples с регулярным выражением ,, вы получите 1, 2, 3 и apples.

Ваш сложный splitregex "(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b*(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b" в основном пытается разбить вашу строку по границам между словами (принимая во внимание такие вещи, как слово, находящееся в начале / конце строки или начинающееся с . (..10)).

Вместо этого было бы намного проще явно искать сами цифры!Вместо разбиения на пробелы между числами, просто явно соответствуют числам.

Таким образом, вы используете регулярное выражение для чисел / чисел \\d*\\.\\d+|\\d+ и распечатывает совпадения (скореечем разделение) с использованием myMatcher.group().

например:

String input = "x: 1.6 ..10;";
myPattern = Pattern.compile('\\d*\\.\\d+|\\d+');
myMatcher = Pattern.matcher(input);
while (myMatcher.find()) {
    System.out.println(myMatcher.group());
    // will print 1.6, .10
}

В зависимости от того, что вы хотите (например, относительно ..10), регулярное выражение можно настроить.

0 голосов
/ 26 декабря 2011

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

String input="x: 1.6 ..10";
String[] meta=input.split("[^0-9.-]+");

Для вышеизложенного мета будет назначен {"1.6", "..10"}

String[] example="123, -.456, 78.910 : 11 : -12".split("[^0-9.-]+")

В результате получится {"123", "-.456", "78.910", "11", "-12"}

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