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?


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)


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».


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".


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.