RegEx: abbina i numeri di lunghezza variabile


130

Sto cercando di analizzare un documento che ha numeri di riferimento disseminati in esso.

Testo testo testo {4: 2} testo più incredibile {4: 3} molto più tardi su {222: 115} e ancora altro testo.

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

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

Tuttavia, questo ovviamente fallisce nel momento in cui ti imbatti in un numero di due o tre cifre, e ho difficoltà a capire cosa dovrebbe essere. Non ci saranno mai più di 3 cifre {999: 999} è la dimensione massima da gestire.

Qualcuno ha un'idea di un'espressione corretta per gestire questo?


8
Anche se all'OP non importa, sono curioso: perché il downvote su questa domanda? Non vedo nulla di sbagliato in questo.
Giovanni,

3
@Giovanni: per qualche ragione alla gente piace sottovalutare le domande in cui ci sono risposte facili, specialmente nel regextag.
CanSpice,

1
Alla fine questa domanda ha ottenuto un rango più alto su Google e ho trovato la mia risposta in questa.
Jasonfish,

Risposte:


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

prova ad aggiungere plus


Mi ci è voluto troppo tempo per trovare ... grazie per questa informazione!
level42

76

Quale motore regex stai usando? La maggior parte supporterà la seguente espressione:

\{\d+:\d+\}

In \drealtà è una scorciatoia per [0-9], ma la parte importante è l'aggiunta del +quale significa "uno o più".


31

Prova questo:

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

I {1,3}mezzi "corrispondono tra 1 e 3 dei 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 \dper le cifre anziché [0-9]per la maggior parte dei sapori regex:

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

Puoi anche considerare di scappare dall'esterno {e }, solo per chiarire che non fanno parte di una definizione di ripetizione.


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

1

{\ d *: \ d *} dovrebbe funzionare.

* significa corrispondenza 0 o più delle occorrenze precedenti, che è una cifra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.