Quiero tener una expresión regular que puede detectar última expresión matemática con el fin de cambio de signo de esa expresión, por ejemplo:
5 --> -5
-5 --> 5
5+2*cos(10) --> 5-2*cos(10)
5-cos(10+2) --> 5+cos(10+2)
Todavía no podía crear cualquier expresión regular que puede coincidir con la última expresión. He creado esta expresión regular (\+[(cos|sin|tan)])+(.*[0-9]*.)
pero sólo selecciono la última expresión si hay un sen / cos o bronceado.
Lo siento por ser (muy) tarde a la fiesta, pero aquí está mi solución:
String str = "5*10/2+cos(54/90)", regex = "(\\+|-)(?=(?:[a-zA-Z]*\\(.*?\\))|[0-9^*/]+$)";
Pattern pat = Pattern.compile(regex);
Matcher m = pat.matcher(str);
String r = "";
if(m.find())
{
r = m.group(1).equals("+")?"-":"+";
}
str = str.replaceAll(regex, r);
System.out.println(str);
Estoy usando BlueJ como un IDE, por cierto.
He aquí una demostración en vivo: https://regex101.com/r/3EM9Ix/1
EXPLICACIÓN
(\\+|-)
selecciona el operador, '+' o deseado '-' (?=(?:[a-zA-Z]*\\(.*?\\))|[0-9^*/]+$)
es la expresión regular que comprueba si el operador es seguido por cualquiera de una función que tiene letras en él o sólo algunos más dígitos