Seite 1 von 1

an substrings etwas dranhängen

Verfasst: Montag 9. Juli 2018, 21:42
von blutigeranfaenger
Hallo zusammen,
ich habe folgende Frage: ich möchte aus einem Text ein paar Substrings ersetzen, und zwar so, dass alle Substrings die meinen Kriterien entsprechen, einen weiteren Substring angehängt bekommen, egal was nach dem gesuchten Substring folgt. In meinem vereinfachten Beispiel soll alles was mit Fenster anfängt, ein "chen" angehöngt bekommen. Also "Fensterchen", "Fensterlederchen", "Fenstergriffchen"
Ich konnte schon den regex definieren, aber wie kann ich den Text in der geünschten Weise verändern?

Code: Alles auswählen

#!/usr/bin/env python3
import re
text = "An meinem Fenster habe ich einen Griff, den Fenstergriff. Mit einem Fensterleder kann ich das Fenster und den Fenstergriff reinigen."
fensterstring =re.compile(r"Fenster[a-z]* ") 

Re: an substrings etwas dranhängen

Verfasst: Montag 9. Juli 2018, 22:45
von __blackjack__
Dein regulärer Ausdruck erwischt nicht alle Fenster.

Du suchst die `sub()`-Methode.

Re: an substrings etwas dranhängen

Verfasst: Dienstag 10. Juli 2018, 08:07
von blutigeranfaenger
Ja, die sub()-Methode ist mir ein Begriff. Ich habe wenigstens kapiert, wie man "Fesnster" durch irgendetwas anderes ersetzen kann.

Code: Alles auswählen

textneu = re.sub(fensterstring,"Fahrrad",text)
Aber in diesem Falle wird alles was der RE entspricht durch "Fahrrad" ersetzt. Ich wollte etwas an die unveränderte RE dranhängen. Ich habe es versucht mit:

Code: Alles auswählen

textneu = re.sub(fensterstring,fensterstring+"chen",text)
Und das gab dann die Meldung:
TypeError: unsupported operand type(s) for +: '_sre.SRE_Pattern' and 'str'
Wenn ich es recht verstanden habe, erstetzt sub() eine bestimmte Gruppe von Strings durch ein und denselben neuen, z.B. alle möglichen Schreibweisen von Meyer zu ein und derselben. Was ich möchte, ist die gefundenen Substrings um einen bestimmten Teil zu erweitern, eine Silbe dranzuhängen.

Re: an substrings etwas dranhängen

Verfasst: Dienstag 10. Juli 2018, 08:25
von Sirius3
dafür kennt `sub` Platzhalter für die Gruppen in Deinem regulären Ausdruck. Wenn Dir Gruppen nichts sagen, arbeite einfach mal ein Tutorial zu regulären Ausdrücken durch.

Re: an substrings etwas dranhängen

Verfasst: Montag 16. Juli 2018, 19:34
von blutigeranfaenger
Hallo,
ich habe dann schließlich unter dem Begriff "back-references" gefunden, was ich brauchte. Ist jemand an meiner Lösung interessiert?

Re: an substrings etwas dranhängen

Verfasst: Montag 16. Juli 2018, 20:08
von Sirius3
Back-References braucht man eigentlich nicht

Code: Alles auswählen

textneu = re.sub(r"(Fenster[a-z]*)", r"\1chen", text)
Jetzt muß man nur noch die Artikelchen anpassen.