Seite 1 von 1

back references funktioniert nicht, wie gedacht

Verfasst: Montag 16. Juli 2018, 19:39
von blutigeranfaenger
Hallo zusammen,
ich möchte einen Substring, wenn zweimal hintereinander vorkommt verändern, in meinem vereinfachten Beispiel soll aus A A A[ A] und aus c c c[ c] werden.
Bei diesem einfachen Beispiel kriege ich es zwar hin, aber ich hatte es mir mit back references einfacher vorgestellt, aber es funkioniert leider nicht, und ich kriege nicht raus, warum. Hier mein Code:

Code: Alles auswählen

#!/usr/bin/env python3
import re
Text = """
A B C D 
E F G H 
A A B A 
X Y Z F 
c c d c 
"""
# das Muster A A B A soll durch A[ A ] und c c durch c[ c] ersetzt werden
#neuerText = re.sub(r"([Ac]\s)([Ac]\s)",r"\1[ \2] ",Text) #das klappt
neuerText = re.sub(r"(?P<test>[Ac]\s)\g<test>",r"\g<test>[ \g<test>] ",Text ) # klappt nicht, wieso?
print(neuerText)

Re: back references funktioniert nicht, wie gedacht

Verfasst: Montag 16. Juli 2018, 20:37
von __blackjack__
@blutigeranfaenger: Das erste was Du auskommentiert hast, funktioniert übrigens nicht wirklich, es sei denn Du wolltest auch 'A c ' durch 'A[ c] ' und 'c A ' durch 'c[ A] ' ersetzen. Das tut das nämlich.

Der Fehler ist das '\g<test>' im *Muster* nicht das macht was Du denkst. Im Muster gibt es eine andere Syntax um sich auf eine bereits gematchte Gruppe zu beziehen.

Re: back references funktioniert nicht, wie gedacht

Verfasst: Montag 16. Juli 2018, 20:43
von blutigeranfaenger
O.k., und wie geht die andere Syntax?
Unnd die auskommentierte Zeile macht, zumindest auf meiner Kiste, was sie soll.
Jedenfalls kommt, nachdem ich das #-Zeichen versetzt habe, raus:
py3 regextest07.py
A B C D
E F G H
A [ A ] B A
X Y Z F
c [ c ] d c

Re: back references funktioniert nicht, wie gedacht

Verfasst: Montag 16. Juli 2018, 20:46
von __blackjack__
@blutigeranfaenger: Wie die andere Syntax geht, steht in der Dokumentation vom `re`-Modul. :-þ

Ich habe ja nicht gesagt das die auskommentierte Zeile das nicht macht, die macht *mehr* als was Du im Text beschrieben hast. Die Frage ist halt ob das gewünscht ist, oder nicht.

Re: back references funktioniert nicht, wie gedacht

Verfasst: Montag 16. Juli 2018, 21:22
von blutigeranfaenger
Ok, habe verstanden. Mit dem regex wäre auch z.B. A c oder c A und noch weiteres "gematched" worden. Nein, das wollte ich nicht.