Como parte de un proyecto para la escuela, necesito reemplazar una cadena del formulario:
5 * x^3 - 6 * x^1 + 1
a algo como:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Creo que esto se puede hacer con expresiones regulares, pero aún no sé cómo hacerlo.
¿Me puedes echar una mano?
PD La asignación real es implementar una aplicación Java de procesamiento de polinomios, y estoy usando esto para pasar polynomial.toString () del modelo a la vista, y quiero mostrarlo usando etiquetas html de una manera bonita.
Respuestas:
fuente
fuente
replaceAll
método lo hace implícitamentePattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Por lo tanto, si reutiliza el patrón de esta manera, se evitarán los objetos redundantes. Además, como dice @MarcelValdezOrozco, hacerlo estático evitará invocaciones innecesarias de compilación de patrones. :)fuente
fuente
tenga en cuenta que unir ambos reemplazos en una sola expresión regular / reemplazo sería una mala elección porque las expresiones más generales como
x^3 - 6 * x
fallarían.fuente
Si esto es para cualquier expresión matemática general y se permiten expresiones entre paréntesis, será muy difícil (quizás imposible) hacerlo con expresiones regulares.
Si los únicos reemplazos son los que mostró, no es tan difícil de hacer. Primero
*
elimine los 's, luego use la captura como mostró Can Berk Güder para manejar los^
' s.fuente
¿Cuál es tu polinomio? Si lo está "procesando", estoy imaginando que se generará algún tipo de árbol de subexpresiones en algún momento, y pensaría que sería mucho más simple usar eso para generar su cadena que volver a analizar el raw expresión con una expresión regular.
Simplemente lanzando una forma diferente de pensar por ahí. No estoy seguro de qué más está pasando en su aplicación.
fuente
Prueba esto:
Asegúrese de importar java.util.regex.
fuente
fuente
Querrá examinar la captura en expresiones regulares para manejar envolver el 3 en ^ 3.
fuente
Prueba esto, puede que no sea la mejor manera. pero funciona
fuente
Echa un vistazo a antlr4. Te llevará mucho más lejos en la creación de una estructura de árbol que las expresiones regulares solas.
https://github.com/antlr/grammars-v4/tree/master/calculator (calculator.g4 contiene la gramática que necesita)
En pocas palabras, usted define la gramática para analizar una expresión, usa antlr para generar código java y agrega devoluciones de llamada para manejar la evaluación cuando se está construyendo el árbol.
fuente