Pregunta
Necesito una expresión regular CLR para fracciones o números enteros y fracciones donde
1/2
es correcto
12 2/3
también es correcto
y un signo menos puede aparecer justo antes de cualquier número.
Primero se me ocurrió -? ([0-9] *)? -? [0-9] + \ / -? [0-9] +
pero eso parece permitir < code> 2/7 12 también, por ejemplo.
Solución
Bueno, esa expresión regular estaría en dos partes, el número entero (opcional):
(:?-?\d+ )?
y la parte fraccionaria:
-?\d+/-?\d+
Y necesitamos unir la cadena completa; entonces:
^(:?-?\d+ )?-?\d+/-?\d+$
Prueba un poco:
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+
Sin embargo, esto permite " -12 -2 / -3 "
también, o cosas como " 1 -1 / 2 "
que no tiene mucho sentido.
ETA: su expresión regular original también funciona. Simplemente carecía de los anclajes para el inicio y el final de la cadena ( ^
y $
, respectivamente). Agregarlos hace que funcione correctamente.
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{ Bueno, esa expresión regular estaría en dos partes, el número entero (opcional):
(:?-?\d+ )?
y la parte fraccionaria:
-?\d+/-?\d+
Y necesitamos unir la cadena completa; entonces:
^(:?-?\d+ )?-?\d+/-?\d+$
Prueba un poco:
<*>
Sin embargo, esto permite " -12 -2 / -3 "
también, o cosas como " 1 -1 / 2 "
que no tiene mucho sentido.
ETA: su expresión regular original también funciona. Simplemente carecía de los anclajes para el inicio y el final de la cadena ( ^
y $
, respectivamente). Agregarlos hace que funcione correctamente.
-match $re} | gu
True
Sin embargo, esto permite " -12 -2 / -3 "
también, o cosas como " 1 -1 / 2 "
que no tiene mucho sentido.
ETA: su expresión regular original también funciona. Simplemente carecía de los anclajes para el inicio y el final de la cadena ( ^
y $
, respectivamente). Agregarlos hace que funcione correctamente.
Otros consejos
Simplemente tenía un requisito similar, pero también quería hacer coincidir los números decimales. Se me ocurrió la siguiente expresión regular
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
O solo esto si no quieres grupos con nombre
^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
Para eliminar el número decimal de la validación, se acortaría a
^-?\d+((/\d+)|(\s\d+/\d+))?$
¡Espero que esto ayude a alguien!
prueba esto, solo para una fracción y no para el número entero
/^\d{1}\/?\d{1}$/