2017-03-07 1 views
0

Ich schreibe oft ziemlich komplizierte Reguläre Ausdrücke in Python. Zum Beispiel:Konvertieren regulärer Ausdruck Syntax von Python zu POSIX

content = ... 
regex = '(.*%.*)([^A-Za-z_])(PAGES)([^A-Za-z_])(.*%.*)' 
repl = '\g<1>\g<2>pages\g<4>\g<5>' 
re.sub(regex, repl, content) 

Verwendet in this pull request.

Es wäre sehr hilfreich, wenn ich den Standard GNU sed verwenden könnte, anstatt jedes Mal ein spezielles Skript zu schreiben, wenn ich Dateien rekursiv massenweise ändern möchte. Das Problem ist, dass Python uses an entirely different regex syntax than sed (POSIX), für reasons well-known to any seasoned engineer.

Gibt es eine Standardmethode, um reguläre Ausdrücke von einer Syntax in eine andere zu konvertieren?

Ich weiß, dass die Konvertierung nicht immer funktioniert (einige Funktionen wie Lookahead sind nicht standard), aber eine 80-20 Lösung wäre sehr nett.

+1

Fragen Sie, wie man Python 're' Muster in POSIX konvertiert? Trotzdem klingt die Frage zu breit. –

+0

@ WiktorStribiżew und, hoffentlich, umgekehrt –

+1

Related: [Regex Rosetta Stone] (https://docs.google.com/spreadsheets/d/174ZtgXlzb-XvEVotDWLTuC4kcvwJj6lyrQw5JqZKfis/edit#gid=0) – Udi

Antwort

1

Sie könnten das sh Paket verwenden.

https://pypi.python.org/pypi/sh

Beispielcode: Nehmen wir an Sie mit der folgenden Zeichenkette haben test.txt John ist ein guter Junge

from sh import sed 
sed('s/John/Nick/g','test.txt') 

Nach der Ausführung der Datei Nick eine haben wird, ist guter Junge

+0

Siehe meinen Kommentar oben - was ist? umgekehrt, Python Regex ** bis ** POSIX? –

1

Wahrscheinlich keine vollständige Lösung, aber die regex Paket (nicht die re Paket) Dokumentation erwähnt, dass das Paket Unterstützung für POSIX-Klassen und POSIX-Abgleich hat.

+0

Danke. Wie sieht es umgekehrt aus - Umwandlung * in POSIX? –