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.

¿Fue útil?

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}$/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top