You probably want to split on + and - to get the individual terms. Then for each term, use split again to return whatever comes after the ^, or 0 if there's no ^.
String[] terms = expression.split("(-|\\+)");
for (String term : terms) {
String[] parts = term.split("\\^");
System.out.println("Exponent: " + (parts.length > 1 ? parts[1] : "0"));
}