Domanda
Ho bisogno di un Regex CLR per frazioni o numeri interi e frazioni dove
1/2
è corretto
12 2/3
è corretto anche
e un segno meno può apparire prima di qualsiasi numero.
Per prima cosa ho trovato -? ([0-9] *)? -? [0-9] + \ / -? [0-9] +
ma ciò sembra consentire < codice> 2/7 12 anche per esempio.
Soluzione
Bene, quella regex sarebbe in due parti, il numero intero (opzionale):
(:?-?\d+ )?
e la parte frazionaria:
-?\d+/-?\d+
E dobbiamo abbinare la stringa completa; così:
^(:?-?\d+ )?-?\d+/-?\d+$
Test un po ':
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+
Tuttavia, ciò consente anche " -12 -2 / -3 "
o cose come " 1 -1 / 2 "
che non ha molto senso.
ETA: Anche la tua regex originale funziona. Mancavano solo le ancore per l'inizio e la fine della stringa ( ^
e $
, rispettivamente). Aggiungendoli, farlo funzionare correttamente.
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{ Bene, quella regex sarebbe in due parti, il numero intero (opzionale):
(:?-?\d+ )?
e la parte frazionaria:
-?\d+/-?\d+
E dobbiamo abbinare la stringa completa; così:
^(:?-?\d+ )?-?\d+/-?\d+$
Test un po ':
<*>
Tuttavia, ciò consente anche " -12 -2 / -3 "
o cose come " 1 -1 / 2 "
che non ha molto senso.
ETA: Anche la tua regex originale funziona. Mancavano solo le ancore per l'inizio e la fine della stringa ( ^
e $
, rispettivamente). Aggiungendoli, farlo funzionare correttamente.
-match $re} | gu
True
Tuttavia, ciò consente anche " -12 -2 / -3 "
o cose come " 1 -1 / 2 "
che non ha molto senso.
ETA: Anche la tua regex originale funziona. Mancavano solo le ancore per l'inizio e la fine della stringa ( ^
e $
, rispettivamente). Aggiungendoli, farlo funzionare correttamente.
Altri suggerimenti
Avevo appena un requisito simile, ma volevo anche abbinare i numeri decimali. Ho pensato alla seguente regex
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
O solo se non vuoi gruppi nominati
^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
Per rimuovere il numero decimale dalla convalida, verrà abbreviato in
^-?\d+((/\d+)|(\s\d+/\d+))?$
Spero che questo aiuti qualcuno!
prova questo, solo per singola frazione e non per il numero intero
/^\d{1}\/?\d{1}$/