Dans le cadre d'un projet pour l'école, j'ai besoin de remplacer une chaîne du formulaire:
5 * x^3 - 6 * x^1 + 1
à quelque chose comme:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Je pense que cela peut être fait avec des expressions régulières, mais je ne sais pas encore comment le faire.
Pouvez-vous me donner un coup de main?
PS La tâche réelle est d'implémenter une application Java de traitement polynomial, et je l'utilise pour passer polynomial.toString () du modèle à la vue, et je veux l'afficher à l'aide de balises html de manière jolie.
Réponses:
la source
la source
replaceAll
méthode le fait implicitementPattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Ainsi, si vous réutilisez le modèle de cette façon, les objets redondants seront évités. De plus, comme le dit @MarcelValdezOrozco, le rendre statique empêchera les invocations inutiles de compilation de modèles. :)la source
veuillez noter que joindre les deux remplacements dans une seule expression régulière / remplacement serait un mauvais choix car des expressions plus générales telles que
x^3 - 6 * x
échoueraient.la source
la source
Si c'est pour une expression mathématique générale et que les expressions entre parenthèses sont autorisées, il sera très difficile (peut-être impossible) de le faire avec des expressions régulières.
Si les seuls remplacements sont ceux que vous avez montrés, ce n'est pas si difficile à faire. Commencez par supprimer
*
les fichiers, puis utilisez la capture comme l'a montré Can Berk Güder pour gérer les^
.la source
Quel est votre polynôme? Si vous le «traitez», j'envisage une sorte d'arbre de sous-expressions générées à un moment donné, et je penserais qu'il serait beaucoup plus simple de l'utiliser pour générer votre chaîne que pour réanalyser le brut expression avec une regex.
Juste jeter une autre façon de penser là-bas. Je ne suis pas sûr de ce qui se passe dans votre application.
la source
Essaye ça:
Assurez-vous d'importer java.util.regex.
la source
la source
Vous voudrez examiner la capture dans regex pour gérer l'encapsulation du 3 dans ^ 3.
la source
Essayez ceci, ce n'est peut-être pas la meilleure façon. mais ça marche
la source
Jetez un œil à antlr4. Cela vous mènera beaucoup plus loin dans la création d'une structure arborescente que les seules expressions régulières.
https://github.com/antlr/grammars-v4/tree/master/calculator (calculator.g4 contient la grammaire dont vous avez besoin)
En un mot, vous définissez la grammaire pour analyser une expression, utilisez antlr pour générer du code java et ajoutez des rappels pour gérer l'évaluation lorsque l'arborescence est en cours de construction.
la source