Le fractionnement d'une simple maths expression avec la regex
Je suis en train d'avoir une expression régulière split sur de telles équations 1.5+4.2*(5+2) avec les opérateurs - + * /, de sorte que la sortie serait entrée dans un tableau afin que je puisse analyser individuellement
[0]1.5
[1]+
[2]4.2
[3]*
[4](
[5]5
[6]+
[7]2
[8])
J'ai découvert que le \b
va travailler sur 1+2+3
cependant, si je devais avoir des points décimaux, il ne serait pas divisé.
J'ai essayé de fractionnement avec \b(\.\d{1,2})
cependant, il n'est pas divisée sur le point décimal
Je suis curieux de savoir ce que vous comptez faire quand vous avez les différentes pièces. Cela pourrait-il être un autre cas où vous souhaitez lexicalement analyser une grammaire (lex/yacc), plutôt que de courir à travers une regex?
Je sais que ce n'est pas mon lieu de modifier le titre en raison d'un animal de compagnie de la paix de la mine, mais le fait que certaines personnes disent "maths" au lieu de "mathématiques" qui me dérange.
Je sais que ce n'est pas mon lieu de modifier le titre en raison d'un animal de compagnie de la paix de la mine, mais le fait que certaines personnes disent "maths" au lieu de "mathématiques" qui me dérange.
OriginalL'auteur sutoL | 2010-07-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser ?: pour éviter de capturer les groupes. J'ai laissé faire simple.
OriginalL'auteur Marimuthu Madasamy
Vous pouvez utiliser de largeur nulle correspondance d'anticipation et lookbehind combo en tant que suppléants.
Explication
[…]
est une classe de caractères définition(?<=…)
est un lookbehind; elle affirme que nous pouvons faire correspondre…
à gauche(?=…)
est une anticipation; elle affirme que nous pouvons faire correspondre…
à droitethis|that
est l'alternance(?<=op)|(?=op)
matchs de partout avant ou aprèsop
op
est remplacé par[-+*/()]
, c'est à dire une classe de caractères qui correspond à des opérateurs-
est d'abord ici, de sorte qu'il ne devienne pas une définition de la gamme de méta caractèreRéférences
Questions connexes
(?<=#)[^#]+(?=#)
travail?Plus d'exemples de largeur nulle mise en correspondance pour le partage de l'
Voici d'autres exemples de fractionnement de largeur nulle correspondance des constructions; ceci peut être utilisé pour diviser une chaîne mais aussi de garder des délimiteurs.
Simple phrase de fractionnement, en gardant les signes de ponctuation:
Fractionnement d'une longue chaîne de longueur fixe de pièces, à l'aide
\G
Split avant de majuscules (à l'exception de la première!!)
Une variété d'exemples sont fournis dans les questions liées à ci-dessous.
Questions connexes
"abc<def>ghi<x><x>" -> "abc", "<def>", "ghi", "<x>", "<x>"
"AnXMLAndXSLT2.0Tool" -> "An XML And XSLT 2.0 Tool"
OriginalL'auteur polygenelubricants
Utiliser la correspondance, au lieu de split:
Cette regex acceptera également valable flotte comme:
1.2e+3 * 2
qui doit être égale à2400
. les regexes donnée par les autres répondants échouera.OriginalL'auteur bcosca
Diviser la chaîne en utilisant
[+-/*()]
.Stocker le match via trouvant entre parenthèses.
OriginalL'auteur Allain Lalonde