Настройка регулярного выражения в объекте Pattern для Java-строки

Я пытаюсь получить все совпадения в строке Java. Совпадения должны быть основаниями и степенями в математическом уравнении. Как вы знаете, основания и полномочия могут быть как отрицательными, так и десятичными. У меня есть шаблон, регулярное выражение и соответствие. Это выглядит примерно так, но не дает мне того, чего я ожидаю. Я руководствовался этим постом здесь, в Stackru Regex, чтобы найти целое или десятичное число из строки в Java в одной группе?

Я действительно просто заинтересован в захвате сил, имеющих отрицательные показатели как целые, так и нецелые.

Ну вот мой код:

String ss = "2.5(4x+3)-2.548^-3.654=-14^-2.545";
String regex = "(\\d^+(?:\\d+)?)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(ss);

while(m.find()){
        System.out.println("Wiwi the cat: "+m.group(1));
    }

Вывод этого кода - ничто. Любые идеи или предложения будут великолепны.

Спасибо

2 ответа

Ваша основная проблема в этом персонаже: ^, Это означает "начало ввода", поэтому ваше регулярное выражение не может ничего найти.

Вы должны избежать этого \^ так что это становится буквальным.

Я также исправил остаток вашего регулярного выражения:

String regex = "-?\\d+(\\.\\d*)?(\\^-?\\d+(\\.\\d*)?)?";

Смотрите живую демонстрацию.

И использовать

match.group(); // the whole match

РЕДАКТИРОВАТЬ: заменено [0123456789] с (\\d)

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: добавлен контекст для OP

Ответ

Вот шаблон, который должен соответствовать тому, что вам нужно:

-?(\\d)+(\\.(\\d)+)?\\^-?(\\d)+(\\.(\\d)+)?

объяснение

-? - ноль или один минус символы

(\\d)+ - одна или несколько цифр

(\\.(\\d)+)? - (необязательно) десятичная точка, за которой следуют одна или несколько цифр

\\^ - один символ каретки


Используя это на вашем входе с String.replace(pattern, "[FOUND]") произведено:

"2.5(4x+3)[FOUND]=[FOUND]"

В контексте вашего ответа просто замените regex с тем, который я написал, и использовать m.group() вместо m.group(1),

String ss = "2.5(4x+3)-2.548^-3.654=-14^-2.545";
String regex = "-?(\\d)+(\\.(\\d)+)?\\^-?(\\d)+(\\.(\\d)+)?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(ss);

while(m.find()) {
    System.out.println("Wiwi the cat: " + m.group());
}

Удачи!

Другие вопросы по тегам