2011-09-13 27 views
75

Estoy tratando de analizar un documento que tiene números de referencia en su totalidad.RegEx - Coincidir con los números de longitud variable

texto texto texto {4: 2} texto más increíble {4: 3} mucho más tarde en {222: 115} y, sin embargo algo más de texto.

Las referencias siempre estarán entre corchetes, y siempre habrá dos puntos entre las dos. Escribí una expresión para encontrarlos.

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

Sin embargo, esto obviamente no el momento en que se encuentra con una serie de dos o tres dígitos, y estoy teniendo problemas para averiguar lo que 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 mal con eso. – John

+3

@John: Por alguna razón a la gente le gusta rechazar las preguntas donde hay respuestas fáciles, especialmente en la etiqueta 'regex'. – CanSpice

+35

@xanatos - Entonces, ¿las preguntas de SO son solo para personas que ya son competentes en el tema particular sobre el que preguntan? Qué gran plan. –

Respuesta

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

try añadiendo más (es)

21

Prueba esto:

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

El {1,3} medios "partido entre 1 y 3 de los caracteres precedentes".

8

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

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

Además, se puede utilizar \d para los dígitos en lugar de [0-9] para la mayoría de sabores de expresiones regulares:

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

También es posible que desee considerar la posibilidad de escapar de la { exterior y }, sólo para dejar claro que se 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 regulares, a menos que le gusten los dígitos no europeos: http://www.fileformat.info/info/unicode/category/Nd/list.htm – xanatos

48

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

\{\d+:\d+\} 

El \d es en realidad la abreviatura de [0-9], pero lo importante es la adición de + que significa "uno o más".

Cuestiones relacionadas