RegEx - Faire correspondre les nombres de longueur variable

131

J'essaie d'analyser un document qui contient des numéros de référence.

Texte texte texte {4: 2} texte plus incroyable {4: 3} bien plus tard {222: 115} et encore du texte.

Les références seront toujours placées entre crochets et il y aura toujours un deux-points entre les deux. J'ai écrit une expression pour les trouver.

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

Cependant, cela échoue évidemment au moment où vous rencontrez un nombre à deux ou trois chiffres, et j'ai du mal à comprendre ce que cela devrait être. Il n'y aura jamais plus de 3 chiffres {999: 999} est la taille maximale à traiter.

Quelqu'un a-t-il une idée d'une expression appropriée pour gérer cela?

Orties Jarrod
la source
8
Même si le PO s'en fiche, je suis curieux: pourquoi le vote négatif sur cette question? Je n'y vois rien de mal.
John
3
@John: Pour une raison quelconque, les gens aiment voter contre les questions où il y a des réponses faciles, en particulier dans le regextag.
CanSpice
1
En fin de compte, cette question a obtenu un rang plus élevé sur Google et j'ai trouvé ma réponse dans celle-ci.
Jasonfish

Réponses:

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

essayez d'ajouter plus (s)

genèse
la source
Cela m'a pris beaucoup trop de temps à trouver ... merci pour cette information!
niveau42 du
76

Quel moteur de regex utilisez-vous? La plupart d'entre eux soutiendront l'expression suivante:

\{\d+:\d+\}

Le \dest en fait un raccourci pour [0-9], mais la partie importante est l'ajout de +ce qui signifie «un ou plusieurs».

Lily Ballard
la source
31

Essaye ça:

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

Les {1,3}moyens "correspondent entre 1 et 3 des caractères précédents".

CanSpice
la source
8

Vous pouvez spécifier le nombre de fois que l’élément précédent doit correspondre à l’aide de {min,max}.

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

En outre, vous pouvez utiliser \dpour les chiffres au lieu de [0-9]pour la plupart des saveurs de regex:

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

Vous pouvez également envisager d'échapper à l'extérieur {et }, juste pour indiquer clairement qu'ils ne font pas partie d'une définition de répétition.

Andrew Clark
la source
2
Non, veuillez ne pas le faire avec la plupart des saveurs de regex, sauf si vous aimez les chiffres non européens: fileformat.info/info/unicode/category/Nd/list.htm
xanatos
1

{\ d *: \ d *} devrait fonctionner.

* signifie correspondre à 0 ou plus des occurrences précédentes, qui est un chiffre.

Ryan Y
la source