Question
J'ai besoin d'un regex CLR pour des fractions ou des nombres entiers et des fractions où
1/2
est correct
12 2/3
est également correct
et un signe moins peuvent apparaître juste avant n’importe quel nombre.
Je suis arrivé pour la première fois avec -? ([0-9] *)? -? [0-9] + \ / -? [0-9] +
mais cela semble permettre à < code> 2/7 12 aussi, par exemple.
La solution
Eh bien, cette expression rationnelle serait en deux parties, le nombre entier (facultatif):
(:?-?\d+ )?
et la partie fractionnaire:
-?\d+/-?\d+
Et nous devons faire correspondre la chaîne complète; alors:
^(:?-?\d+ )?-?\d+/-?\d+$
Tester un peu:
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+
Cependant, cela permet également de "-12 -2 / -3"
, ou des choses comme "1 -1 / 2"
qui ne le sont pas. beaucoup de sens.
ETA: Votre regex originale fonctionne également. Il lui manquait simplement les ancres pour le début et la fin de la chaîne ( ^
et $
, respectivement). En les ajoutant, cela fonctionne correctement.
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{ Eh bien, cette expression rationnelle serait en deux parties, le nombre entier (facultatif):
(:?-?\d+ )?
et la partie fractionnaire:
-?\d+/-?\d+
Et nous devons faire correspondre la chaîne complète; alors:
^(:?-?\d+ )?-?\d+/-?\d+$
Tester un peu:
<*>
Cependant, cela permet également de "-12 -2 / -3"
, ou des choses comme "1 -1 / 2"
qui ne le sont pas. beaucoup de sens.
ETA: Votre regex originale fonctionne également. Il lui manquait simplement les ancres pour le début et la fin de la chaîne ( ^
et $
, respectivement). En les ajoutant, cela fonctionne correctement.
-match $re} | gu
True
Cependant, cela permet également de "-12 -2 / -3"
, ou des choses comme "1 -1 / 2"
qui ne le sont pas. beaucoup de sens.
ETA: Votre regex originale fonctionne également. Il lui manquait simplement les ancres pour le début et la fin de la chaîne ( ^
et $
, respectivement). En les ajoutant, cela fonctionne correctement.
Autres conseils
J'avais juste une exigence similaire, mais je voulais aussi faire correspondre les nombres décimaux. Je suis venu avec la regex suivante
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
Ou simplement ceci si vous ne voulez pas de groupes nommés
^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
Pour supprimer le nombre décimal de la validation, il serait raccourci à
^-?\d+((/\d+)|(\s\d+/\d+))?$
J'espère que ça aide quelqu'un!
essayez ceci, seulement pour une fraction et non pour le nombre entier
/^\d{1}\/?\d{1}$/