RegEx - Números coincidentes de longitud variable


130

Estoy tratando de analizar un documento que tiene números de referencia esparcidos por todo.

Texto texto texto {4: 2} texto más increíble {4: 3} mucho más tarde en {222: 115} y aún más texto.

Las referencias siempre estarán entre paréntesis, y siempre habrá dos puntos entre los dos. Escribí una expresión para encontrarlos.

{[0-9]:[0-9]}

Sin embargo, esto obviamente falla en el momento en que te encuentras con un número de dos o tres dígitos, y estoy teniendo problemas para descubrir cuál debería ser. Nunca habrá más de 3 dígitos {999: 999} es el tamaño máximo para tratar.

¿Alguien tiene una idea de una expresión adecuada para manejar esto?


8
Incluso si al OP no le importa, tengo curiosidad: ¿Por qué el voto negativo sobre esta pregunta? No veo nada malo en ello.
John

3
@John: Por alguna razón, a la gente le gusta rechazar preguntas donde hay respuestas fáciles, especialmente en la regexetiqueta.
CanSpice

1
Al final, esta pregunta obtuvo un rango más alto en Google y encontré mi respuesta en esta.
Jasonfish

Respuestas:


132
{[0-9]+:[0-9]+}

intenta agregar más


Esto me llevó demasiado tiempo encontrar ... ¡gracias por esta información!
nivel42

76

¿Qué motor regex estás usando? La mayoría de ellos admitirán la siguiente expresión:

\{\d+:\d+\}

En \drealidad es la abreviatura de [0-9], pero la parte importante es la adición de lo +que significa "uno o más".


31

Prueba esto:

{[0-9]{1,3}:[0-9]{1,3}}

Los {1,3}medios "coinciden entre 1 y 3 de los caracteres anteriores".


8

Puede especificar cuántas veces desea que coincida el elemento anterior mediante {min,max}.

{[0-9]{1,3}:[0-9]{1,3}}

Además, puede usar \dpara dígitos en lugar de [0-9]para la mayoría de los sabores regex:

{\d{1,3}:\d{1,3}}

También puede considerar escapar de lo externo {y }, solo para dejar en claro que no son parte de una definición de repetición.


2
No, por favor, no lo haga con la mayoría de los sabores de expresiones
xanatos

1

{\ d *: \ d *} debería funcionar.

* significa coincidencia 0 o más de ocurrencias anteriores, que es un dígito.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.