Вы можете использовать это регулярное выражение (и дополнительную замену):
\((-?(?:\d+|x))x?(?:\+(\d+)|(-\d+))\)\^(-?\d+)
Заменить на: [$1, $2$3, $4]
.Затем замените x
на 1
Демо (для первой части)
Код:
String str = "(-x-99)^-9";
str = str.replaceAll("\\((-?(?:\\d+|x))x?(?:\\+(\\d+)|(-\\d+))\\)\\^(-?\\d+)", "[$1, $2$3, $4]")
.replaceAll("x", "1");
Выход:
[- 1, -99, -9]
Регулярное выражение, объяснено:
\( # Literal '('
(-?(?:\d+|x)) # First capturing group: Either digits or single x
x? # Followed by an optional x
(?:\+(\d+)|(-\d+)) # Match either: positive number on 2nd capturing group (without + sign)
# or negative number on 3rd capturing group (with - sign)
\) # Literal ')'
\^ # Literal '^'
(-?\d+) # Exponent, 4th capturing group