Regex ignoriert Übereinstimmung, wenn sie in einer 23-stelligen Zeichenfolge enthalten ist

Regex ignoriert Übereinstimmung, wenn sie in einer 23-stelligen Zeichenfolge enthalten ist

Ich habe ein Problem damit, eine Lösung für eine Situation zu finden. Ich habe diesen regulären Ausdruck, der einer bestimmten Ziffernfolge entspricht:

(102030)\d{10}

Wenn ich dies als Testdaten verwende, erhalte ich die folgenden Übereinstimmungen:

75277887243040354513001
55345377243014107206375
810203087654135168       <- Match
1102030698798798477      <- Match
71020307248040361799581  <- Match

Ich versuche, Fälle zu ignorieren, in denen die Zeichenfolge 23 Ziffern enthält. Ist das nur mit regulären Ausdrücken möglich? Ich habe es mit negativem Look-Ahead versucht, aber es ist mir nicht gelungen.

Antwort1

Um nach vorne zu schauen, brauchen Sie etwas davor - also beginnen wir mit

\d

Dann durch Negativ vor den nächsten 22 Ziffern:

(?!\d{22})

Wir filtern alle Zeilen mit 23 Ziffern heraus. Dann folgt möglicherweise Ihre ursprüngliche Zeichenfolge

(102030)\d{10}

Der vollständige reguläre Ausdruck lautet also

\d(?!\d{22})(102030)\d{10}

Das Ergebnis finden Sie unterregex101.com:

Bildbeschreibung hier eingeben

Antwort2

\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

Dadurch wird die Übereinstimmung in ihrer ersten Untergruppe erfasst.

verwandte Informationen