Seite 1 von 1
Wie ersetzt man eine named group regex
Verfasst: Donnerstag 21. November 2013, 17:39
von tuner
Hallo zusammen,
leider habe ich hier keine Lösung gefunden. Kann mir hier jemand helfen?
ich habe eine Zeile, z.B.
und eine regex
Wie kann ich die Gruppe key hier ersetzen?
Gruss.
Re: Wie ersetzt man eine named group regex
Verfasst: Donnerstag 21. November 2013, 18:11
von BlackJack
@tuner: Meinst Du im Ersetzungsstring? Da kann man per \g<key> darauf Bezug nehmen. Ansonsten ist die Problembeschreibung für mich zu unklar.
Re: Wie ersetzt man eine named group regex
Verfasst: Donnerstag 21. November 2013, 18:26
von tuner
Hallo BlackJack,
also im Prinzip möchte ich eine neue Zeile bei dem key mit einem neuen String ersetzt worden ist.
Also so etwas wie:
Code: Alles auswählen
newPass = 'abc'
line='RABBIT_PASSWORD=xyz'
lre='^RABBIT_PASSWORD=(?P<key>.*)'
newline = re...(magic)
Am Ende soll
herauskommen.
Gruss.
Re: Wie ersetzt man eine named group regex
Verfasst: Donnerstag 21. November 2013, 20:04
von BlackJack
@tuner: Dann hast Du im Grunde genau das falsche in eine Gruppe gesetzt, nämlich das was Du wegwerfen/austauschen willst und nicht das was Du in der Ersetzung wiederverwenden willst. Letztendlich sind REs hier aber auch ein wenig Overkill.
Code: Alles auswählen
new_password = 'abc'
line = 'RABBIT_PASSWORD=xyz'
key, equals, value = line.partition('=')
if key == 'RABBIT_PASSWORD':
line = key + equals + new_password
Re: Wie ersetzt man eine named group regex
Verfasst: Freitag 22. November 2013, 11:05
von tuner
Hallo BlackJack,
das war ja nur ein Ausschnitt, das ganze tool verwaltet mehrere Passwörter und allein Rabbit hat seinen Pass an 6 verschiedenen Stellen, für verschiedene Applikationen..
Aber dein Post hat mich auf die Lösung gebracht..
regex:
und als substitution
Kann man dann schön automatisieren..
Danke und Gruss,
Antonios.
Re: Wie ersetzt man eine named group regex
Verfasst: Freitag 22. November 2013, 11:44
von BlackJack
@tuner: Da sind jetzt 2 Gruppen zu viel in dem regulären Ausdruck. Die leere Gruppe erscheint mir besonders sinnfrei. Und die Lösung kommt nicht mit Passwörtern klar in denen ein \ gefolgt von einer Ziffer vorkommt.
Re: Wie ersetzt man eine named group regex
Verfasst: Freitag 22. November 2013, 12:48
von tuner
Hallo BlackJack,
das mit den zusätzlichen Gruppen passt schon, da ich an anderer Stelle den Pass abfragen muss und bei manchen stellen hinter dem Passwort weiterer Kontext folgt. Aber alle werden mit der gleichen Funktion verarbeitet..
Für die passwörter nutze ich zufällig erzeugte, ausreichend grosse folgen variabler Länge aus string.ascii_letters + string.digits.
string.punctuation wurde weggelassen, weil das bei manchen Apps zu Problemen führt und eben auch viel Overhead mit der Verwaltung der regex erzeugen würde.
Gruss.
Re: Wie ersetzt man eine named group regex
Verfasst: Freitag 22. November 2013, 12:54
von Sirius3
tuner hat geschrieben:bei manchen stellen hinter dem Passwort weiterer Kontext folgt
Dafür helfen die leeren Klammern aber nichts.
Re: Wie ersetzt man eine named group regex
Verfasst: Freitag 22. November 2013, 13:05
von tuner
Ja, schon.
Da werden andere regex verwendet..
Bei mysql sieht die passwortzeile komplett unterschiedlich aus z.b.:
Code: Alles auswählen
sql_connection = mysql://service:[PASS]@localhost/service?charset=utf8
oder
MYSQL_PASSWORD=[PASS]
Wenn alle mit der gleichen Funktion ersetzt werden sollen, muss halt bei der zweiten dahinter ein leerer match gemacht werden, damit die substitution nicht zu exceptions führt..