Ich habe ein Muster, das für mehrere Schlüssel/Wert-Paare entspricht, und die Schlüssel/Wert-Strings können durch beliebige Zeichen getrennt werden, dann die Gruppen von Schlüssel/Wert kann auch abgegrenzt werden, nur nicht durch das gleiche Zeichen.Verweis auf benannte Gruppen in Look-around (Python 2.x)
Ich habe herausgefunden, wie dynamische Trennzeichen zulässig sind, und das gleiche Trennzeichen darf nicht zweimal verwendet werden. ZB:
\w+(?P<kv_delim>[:;|])\d+(?P<g_delim>(?!(?P=kv_delim))[:;|])\w(?P=kv_delim)\d(?P=g_delim)?
You can view the regex101.com example here. Und es funktioniert gut, das Problem kommt, wenn Sie eine der beiden genannten Gruppen in einem positiven Look-Behind verwenden.
Läßt die Zeichenfolge sagen
foo:1;r:2
Das "Schlüssel/Wert-Trennzeichen" ist (mit dem Namen Gruppe: kv_delim
) ist die :
, dann ist die "Gruppe Begrenzer" (benannte Gruppe: grp_delim
) die ;
Was ich versuche zu tun ist dynamisch die :
und ;
, dann in einer Rundum-Erklärung, suchen Sie nach foo<kv_delim>
oder bar<kv_delim>
.
Wenn ich die Begrenzer (im Look-Around) fest codiere, you can see it works. Aber wenn ich versuche, die named-Gruppe kv_delim
innerhalb der Look-around-Anweisung zu referenzieren, you can see it throws errors. Ich erhalte den Fehler:
Subpattern references are not allowed within a lookbehind assertion
Welche was kickin mein Hintern ist
Wer eine Möglichkeit haben, diese Arbeit zu machen?
Danke!
Verwenden Sie einfach '.' anstelle einer Rückreferenzierung. –
Teilen Sie einfach Dinge über ein paar Zeilen. Der Versuch, eine Zeichenkette mit einer einzigen Regex wie dieser zu analysieren, macht normalerweise unverständlichen und nicht überprüfbaren Code. – Evert
Die [Dokumentation legt eindeutig fest] (https://docs.python.org/3/library/re.html#regular-expression-syntax) sowohl für negative als auch positive Look-Behind-Assertions: "Das enthaltene Muster darf nur Strings entsprechen einiger fester Länge ". – Evert