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.

È stato utile?

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}$/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top