2009-09-21 7 views
0

Je dois analyser une chaîne ayant l'entrée 5.55FIX, 5.55 Variable, 5.55Float. J'ai besoin d'extraire la valeur décimale et la chaîne séparément. veuillez suggérer?Expression régulière pour diviser 5.55FIX en 5.55 et FIX

+0

Quelle langue sera l'interprétation de cette expression rationnelle? Les définitions Regex diffèrent d'une langue à l'autre, comme JavaScript en utilisant l'ancienne regex PERL et XML en utilisant une expression regex plus récente qui est plus définitive en utilisant moins de caractères. –

+1

Y a-t-il une raison spécifique pour laquelle vous avez besoin d'une expression régulière? Si votre chaîne entière est "[somenumber] FIX", vous pouvez simplement couper les trois derniers caractères. – Joren

+0

Mais Joren le chiffre décimal peut avoir une précision de 3 ou 4 chiffres comme 56.785 –

Répondre

2

Selon l'endroit où vous allez utiliser la regex, l'un d'entre eux fera sûrement l'affaire. Le groupe 1 contiendra le numéro, le groupe 2 contiendra la chaîne. Bien sûr, cela suppose que la chaîne ne commence jamais avec un nombre et sans espace entre le nombre réel (dans ce cas, il ne peut même pas être différencié par un humain à moins qu'il ne connaisse la valeur du nombre ou celle de la chaîne avance).

 

(\d+\.\d+)\W*(\w+) 
(\d+\.\d+)\p{Z}*(\w+) 
 

Comme Suggérée par Drew Noakes, si vous ne vous préoccupez la partie décimale, vous pouvez également utiliser l'un de ces:

 

\d+(\.\d+)\W*(\w+) 
\d+(\.\d+)\p{Z}*(\w+) 
 

Comme suggéré par David Andres, vous pouvez améliorer les expressions en ajoutant^au début et $ à la fin si vous utilisez l'expression rationnelle sur des chaînes composées uniquement de la manière que vous avez indiquée dans votre message. Cela signifie qu'avec ces deux caractères, "5.55FIX" correspond, mais pas "Value: 5.55FIX".

+1

À moins que vous n'attendiez de faire correspondre des nombres au format '55.', l'expression rationnelle pourrait être améliorée de sorte que la partie de formatage des nombres passe de' \ d + \. \ D +' à '\ d + (\. \ D +)?' –

+2

@ emaster: Ajoutez des caractères flanquants^$ et vous êtes bon. –

0

Une autre solution adaptée à vos questions seront exactes ...

^(5\.55)(FIX)$ 
+0

Vous répondez seulement au titre ... Bien que le corps soit un peu confus. – PhiLho

Questions connexes