RegEx - Übereinstimmungszahlen variabler Länge

129

Ich versuche, ein Dokument zu analysieren, in dem Referenznummern verstreut sind.

Text Text Text {4: 2} unglaublicherer Text {4: 3} viel später {222: 115} und noch etwas mehr Text.

Die Referenzen werden immer in Klammern gesetzt, und zwischen den beiden befindet sich immer ein Doppelpunkt. Ich schrieb einen Ausdruck, um sie zu finden.

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

Dies schlägt jedoch offensichtlich fehl, sobald Sie auf eine zwei- oder dreistellige Zahl stoßen, und ich habe Probleme, herauszufinden, was das sein sollte. Es wird nie mehr als 3 Ziffern geben. {999: 999} ist die maximale Größe.

Hat jemand eine Idee für einen richtigen Ausdruck, um damit umzugehen?

Jarrod Brennnesseln
quelle
8
Auch wenn es dem OP egal ist, bin ich neugierig: Warum die Ablehnung dieser Frage? Ich sehe nichts falsch daran.
John
3
@ John: Aus irgendeinem Grund stimmen die Leute gerne Fragen ab, bei denen es einfache Antworten gibt, insbesondere im regexTag.
CanSpice
1
Am Ende bekam diese Frage einen höheren Rang bei Google und ich fand meine Antwort in dieser.
Jasonfish

Antworten:

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

Versuchen Sie, Pluszeichen hinzuzufügen.

Genesis
quelle
Ich habe viel zu lange gebraucht, um zu finden ... danke für diese Information!
Level 42
76

Welche Regex-Engine verwenden Sie? Die meisten von ihnen unterstützen den folgenden Ausdruck:

\{\d+:\d+\}

Das \dist eigentlich eine Abkürzung für [0-9], aber der wichtige Teil ist die Hinzufügung, +die "eins oder mehrere" bedeutet.

Lily Ballard
quelle
31

Versuche dies:

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

Das {1,3}bedeutet "Übereinstimmung zwischen 1 und 3 der vorhergehenden Zeichen".

CanSpice
quelle
8

Mit können Sie festlegen, wie oft das vorherige Element übereinstimmen soll {min,max}.

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

Sie können auch \dZiffern anstelle der [0-9]meisten Regex-Geschmacksrichtungen verwenden:

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

Vielleicht möchten Sie auch in Betracht ziehen, dem Äußeren zu entkommen {und }nur um klar zu machen, dass sie nicht Teil einer Wiederholungsdefinition sind.

Andrew Clark
quelle
2
Nein, bitte machen Sie es nicht mit den meisten Regex-Aromen, es sei denn, Sie lieben außereuropäische Ziffern: fileformat.info/info/unicode/category/Nd/list.htm
xanatos
1

{\ d *: \ d *} sollte funktionieren.

* bedeutet, dass 0 oder mehr der vorhergehenden Vorkommen übereinstimmen, was eine Ziffer ist.

Ryan Y.
quelle