Pergunta

Eu preciso de um CLR Regex para frações ou números inteiros e frações onde

1/2 está correto 12 2/3 está correto demais

e um sinal negativo pode aparecer antes de qualquer número.

A primeira vez que veio com -?([0-9]* )?-?[0-9]+\/-?[0-9]+ mas que parece permitir que 2/7 12 também, por exemplo.

Foi útil?

Solução

Bem, que regex seria em duas partes, o (opcional) número inteiro:

(:?-?\d+ )?

e a parte fracionária:

-?\d+/-?\d+

E nós precisamos corresponder à cadeia completa; assim:

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

Testing um pouco:

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

No entanto, isso permite "-12 -2/-3" tão bem, ou coisas como "1 -1/2" que não fazem muito sentido.?

ETA: Suas obras regex originais também. Ele só não tinha os âncoras para começar e final da cadeia (^ e $, respectivamente). Adicionando os fazê-lo funcionar corretamente.

Outras dicas

Eu só tinha uma exigência semelhante, mas eu queria para coincidir com números decimais bem. Eu vim com a seguinte regex

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

Ou apenas isso, se você não quer grupos nomeados

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

Para remover o número decimal de validar, seria encurtado para

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

Espero que isso ajude alguém!

tentar isso, apenas para fração único e não o número inteiro

/^\d{1}\/?\d{1}$/
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top