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.
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}$/