2009-10-21 4 views
1

je besoin d'un Regex CLR pour des fractions ou des nombres entiers et des fractions oùCLR pour les fractions Regex

1/2 est correct 12 2/3 est correct aussi

et un signe moins peut apparaître juste avant un certain nombre. J'ai d'abord trouvé -?([0-9]*)?-?[0-9]+\/-?[0-9]+ mais cela semble autoriser 2/7 12 aussi par exemple.

Répondre

2

Eh bien, ce regex serait en deux parties, le (facultatif) entier:

(:?-?\d+)? 

et la partie décimale:

-?\d+/-?\d+ 

Et nous avons besoin de faire correspondre la chaîne complète; si:

^(:?-?\d+)?-?\d+/-?\d+$ 

Test d'un bit:

PS> $re=[regex]'^(:?-?\d+)?-?\d+/-?\d+$' 
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{$_ -match $re} | gu 
True 

Cependant, cela permet "-12 -2/-3" aussi bien, ou des choses comme "1 -1/2" qui ne font pas beaucoup de sens.

ETA: Votre regex d'origine fonctionne également. Il manquait juste les ancres pour le début et la fin de la chaîne (^ et $, respectivement). Ajouter ceux qui le font fonctionner correctement.

+0

tx, et vous avez raison 1 -1/2 n'a pas de sens, ce qui rend plus compliqué: -1/2 qui devraient être possible mais 1 -1/2 pas .. – Peter

1

J'ai juste eu une exigence similaire, mais je voulais aussi faire correspondre les nombres décimaux. Je suis arrivé avec l'expression rationnelle suivante

^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$ 

Ou tout simplement si vous ne voulez pas de groupes désignés

^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$ 

Pour supprimer le nombre décimal de la validation, il serait réduit à

^-?\d+((/\d+)|(\s\d+/\d+))?$ 

Espérons que cela aide quelqu'un!

0

essayer, juste pour la fraction unique et non le nombre entier

/^\d{1}\/?\d{1}$/