RegEx – Match nummers van variabele lengte

Ik probeer een document te ontleden dat overal referentienummers heeft.

Tekst tekst tekst {4:2} meer ongelooflijke tekst {4:3} veel later
{222: 115} en nog wat meer tekst.

De verwijzingen staan altijd tussen haakjes en er staat altijd een dubbele punt tussen de twee. Ik heb een uitdrukking geschreven om ze te vinden.

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

Dit mislukt echter duidelijk op het moment dat je een nummer van twee of drie cijfers tegenkomt, en ik heb moeite om uit te zoeken wat dat zou moeten zijn. Er zullen nooit meer dan 3 cijfers zijn. {999:999} is de maximale grootte om mee om te gaan.

Heeft iemand een idee van een juiste uitdrukking om dit aan te pakken?


Antwoord 1, autoriteit 100%

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

probeer plus(sen) toe te voegen


Antwoord 2, autoriteit 53%

Welke regex-engine gebruikt u? De meeste van hen ondersteunen de volgende uitdrukking:

\{\d+:\d+\}

De \dis eigenlijk een afkorting voor [0-9], maar het belangrijkste is de toevoeging van +wat “één of meer”.


Antwoord 3, autoriteit 25%

Probeer dit:

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

De {1,3}betekent “overeenkomst tussen 1 en 3 van de voorgaande tekens”.


Antwoord 4, autoriteit 5%

Je kunt aangeven hoe vaak je wilt dat het vorige item overeenkomt met {min,max}.

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

U kunt ook \dgebruiken voor cijfers in plaats van [0-9]voor de meeste regex-smaken:

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

Je kunt ook overwegen om de buitenste {en }te omzeilen, om duidelijk te maken dat ze geen deel uitmaken van een herhalingsdefinitie.

Other episodes