Я думаю, что выражение, похожее на,
\^(-?\d+(?:\.\d+)?)|(-?\d+(?:\.\d+)?)|(x)
или,
\^(-?\d+)|(-?\d+)|(x)
может быть полезна для решения проблемы.
Здесь первая группа находит значения экспонентывторая группа возвращает коэффициенты, а третья группа возвращает x
(чтобы можно было выяснить, есть ли в уравнении константа).
Тест
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex = "\\^(-?\\d+(?:\\.\\d+)?)|(-?\\d+(?:\\.\\d+)?)|(x)";
final String string = "5x^3 +2x +1\n"
+ "5x^-3.1 +2x -1\n"
+ "5x^3.23 -2012.12x +10.12\n"
+ "-5x^3.54 +2x -1.512";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Вывод
Full match: 5
Group 1: null
Group 2: 5
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^3
Group 1: 3
Group 2: null
Group 3: null
Full match: 2
Group 1: null
Group 2: 2
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: 1
Group 1: null
Group 2: 1
Group 3: null
Full match: 5
Group 1: null
Group 2: 5
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^-3.1
Group 1: -3.1
Group 2: null
Group 3: null
Full match: 2
Group 1: null
Group 2: 2
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: -1
Group 1: null
Group 2: -1
Group 3: null
Full match: 5
Group 1: null
Group 2: 5
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^3.23
Group 1: 3.23
Group 2: null
Group 3: null
Full match: -2012.12
Group 1: null
Group 2: -2012.12
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: 10.12
Group 1: null
Group 2: 10.12
Group 3: null
Full match: -5
Group 1: null
Group 2: -5
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^3.54
Group 1: 3.54
Group 2: null
Group 3: null
Full match: 2
Group 1: null
Group 2: 2
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: -1.512
Group 1: null
Group 2: -1.512
Group 3: null
Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . При желании вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения:
Пример 2
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex = "\\^(-?\\d+(?:\\.\\d+)?)|(-?\\d+(?:\\.\\d+)?)|(x)";
final String string = "12x^11 +10x^9 -8x^7 +9x^6 -5x^3 +2x -1";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Вывод
Full match: 12
Group 1: null
Group 2: 12
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^11
Group 1: 11
Group 2: null
Group 3: null
Full match: 10
Group 1: null
Group 2: 10
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^9
Group 1: 9
Group 2: null
Group 3: null
Full match: -8
Group 1: null
Group 2: -8
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^7
Group 1: 7
Group 2: null
Group 3: null
Full match: 9
Group 1: null
Group 2: 9
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^6
Group 1: 6
Group 2: null
Group 3: null
Full match: -5
Group 1: null
Group 2: -5
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: ^3
Group 1: 3
Group 2: null
Group 3: null
Full match: 2
Group 1: null
Group 2: 2
Group 3: null
Full match: x
Group 1: null
Group 2: null
Group 3: x
Full match: -1
Group 1: null
Group 2: -1
Group 3: null