an substrings etwas dranhängen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
blutigeranfaenger
User
Beiträge: 63
Registriert: Dienstag 4. März 2014, 12:04

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]* ") 
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dein regulärer Ausdruck erwischt nicht alle Fenster.

Du suchst die `sub()`-Methode.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
blutigeranfaenger
User
Beiträge: 63
Registriert: Dienstag 4. März 2014, 12:04

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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
blutigeranfaenger
User
Beiträge: 63
Registriert: Dienstag 4. März 2014, 12:04

Hallo,
ich habe dann schließlich unter dem Begriff "back-references" gefunden, was ich brauchte. Ist jemand an meiner Lösung interessiert?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Antworten