2011-09-13 20 views
75

Sto tentando di analizzare un documento che contiene numeri di riferimento sparsi per tutto il documento.RegEx - Numeri di corrispondenza della lunghezza variabile

testo testo testo {4: 2} più incredibile di testo {4: 3} molto più tardi {222: 115} e ancora un po 'di testo.

I riferimenti saranno sempre racchiusi tra parentesi e ci sarà sempre un punto tra i due. Ho scritto un'espressione per trovarli.

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

Tuttavia, questo non riesce, ovviamente, il momento in cui ci si imbatte in un numero a due o tre cifre, e sto avendo difficoltà a capire che cosa dovrebbe essere. Non ci saranno mai più di 3 cifre {999: 999} è la dimensione massima da trattare.

Qualcuno ha un'idea di un'espressione corretta per gestirlo?

+8

Anche se l'OP non interessa, sono curioso: perché il downvote su questa domanda? Non vedo niente di sbagliato in questo. – John

+3

@John: Per qualche motivo alle persone piace fare domande di downvote dove ci sono risposte facili, specialmente nel tag 'regex'. – CanSpice

+35

@xanatos - Quindi le domande SO sono solo per le persone che sono già competenti nel particolare argomento che chiedono? Che grande piano. –

risposta

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

prova ad aggiungere più (es)

21

Prova questa:

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

Il {1,3} significa "incontro tra 1 e 3 i caratteri che precedono".

8

È possibile specificare quante volte si desidera far corrispondere l'elemento precedente utilizzando {min,max}.

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

Inoltre, è possibile utilizzare \d per le cifre invece di [0-9] per la maggior parte sapori regex:

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

Si può anche prendere in considerazione sfuggire alla esterno { e }, giusto per mettere in chiaro che essi non fanno parte di una definizione di ripetizione.

+2

No, per favore non farlo con la maggior parte dei sapori regex, a meno che non amiate le cifre non europee: http://www.fileformat.info/info/unicode/category/Nd/list.htm – xanatos

48

Quale motore regex stai utilizzando? La maggior parte di loro sosterrà la seguente espressione:

\{\d+:\d+\} 

Il \d è in realtà una scorciatoia per [0-9], ma la parte importante è l'aggiunta di + che significa "uno o più".