Zusammengesetzte Python-Regexes kombinieren

11

Gibt es in Python einen Mechanismus zum Kombinieren kompilierter regulärer Ausdrücke?

Ich weiß, dass es möglich ist, einen neuen Ausdruck zu kompilieren, indem die Eigenschaft plain-old-string .pattern aus vorhandenen Musterobjekten extrahiert wird. Aber das scheitert in mehrfacher Hinsicht. Zum Beispiel:

%Vor%

Das Ergebnis, das ich suche, ist wie in Perl erreichbar:

%Vor%

Ein Test zeigt die Ergebnisse:

%Vor%

Gibt es irgendwo eine Bibliothek, die diesen Anwendungsfall in Python ermöglicht? Oder eine eingebaute Funktion, die ich irgendwo vermisse?

(Hinweis - ein sehr nützliches Feature in der obigen Perl-Regex ist \g{-1} , das eindeutig auf die unmittelbar vorhergehende Capture-Gruppe verweist, so dass es keine Kollisionen des Typs gibt, über den sich Python beschwert, wenn ich versuche, das zu kompilieren Ich habe das nirgendwo in der Python-Welt gesehen, nicht sicher, ob es eine Alternative gibt, an die ich nicht gedacht habe.)

    
Ken Williams 23.02.2018, 22:21
quelle

1 Antwort

-1

Ich bin kein Perl-Experte, aber es scheint nicht so, als würdest du Äpfel mit Äpfeln vergleichen. Sie verwenden in python benannte Erfassungsgruppen, aber im Perl-Beispiel sehen Sie keine benannten Erfassungsgruppen. Dies verursacht den Fehler, den Sie erwähnen, weil dies

%Vor%

versucht, zwei Erfassungsgruppen namens r1

zu erstellen

Wenn Sie zum Beispiel die unten stehende Regex verwenden, dann versuchen Sie, mit dem Namen auf group_one zuzugreifen. Würden Sie die Zahlen vor "irgendeinem Text" oder nachher erhalten?

%Vor%

Lösung 1

Eine einfache Lösung besteht wahrscheinlich darin, die Namen aus den Erfassungsgruppen zu entfernen. Fügen Sie auch den re.IGNORECASE zu both hinzu. Der folgende Code funktioniert, obwohl ich mir nicht sicher bin, ob das resultierende Regex-Muster mit dem übereinstimmen wird, mit dem es übereinstimmen soll.

%Vor%

Lösung 2

Was ich wahrscheinlich tun würde, ist die separaten regulären Ausdrücke als Zeichenfolgen zu definieren, dann können Sie sie beliebig kombinieren.

%Vor%

Oder noch besser, für dieses spezielle Beispiel, wiederholen Sie nicht muscle2 zweimal, nur die Tatsache, dass es in der Regex wiederholen wird:

%Vor%

gibt Ihnen die folgende Regex:

%Vor%     
Jason Pierrepont 04.03.2018 17:42
quelle

Tags und Links