Ошибка Java? Отличный вывод на 2 одинаковых регулярных выражения - PullRequest
0 голосов
/ 05 июня 2009

Мое регулярное выражение имеет 2 разных вывода из одного и того же кода ... но я не знаю, что не так. Вот кусок кода, надеюсь, вы мне поможете. Спасибо!

String s = "48° 18′ 13,94″ nördliche Breite, "
         + "11° 34′ 31,98″ östliche Länge";

String kommazahl = "[0-9]{1,2}([\\.,][0-9]+)?";
String zahl = "[0-9]{1,2}";

Pattern p1 = Pattern.compile("("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*"
                            +"("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*");

Matcher m1 = p1.matcher(s);

System.out.println(m1.group(1) + "\n" + m1.group(5));

// Output should be:
// 48° 18′ 13,94
// 11° 34′ 31,98

// Output is:
// 48° 18′ 13,94
// 1° 34′ 31,98

Ответы [ 2 ]

5 голосов
/ 05 июня 2009

.* жадно соответствует первому 1 из 11, в то же время все остальные паттерны совпадают. Замените .* чем-то вроде [^0-9]*.

4 голосов
/ 05 июня 2009

Проблема в. * В конце первой строки шаблона. Это жадно соответствует "nördliche Breite, 1".

Возможно, вам следует изменить его на ". *", Чтобы он знал, когда остановиться?

Pattern p1 = Pattern.compile
    ("("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*, "
    +"("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*");

Конечно, это будет работать только в том случае, если между двумя значениями, которые вы хотите использовать в остальных ваших данных, всегда есть «запятая».

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