Ich habe eine Zeichenfolge, die so aussehen könnte
%Vor%Ich überprüfe gerade die Gültigkeit mit, was gut funktioniert
%Vor%jetzt möchte ich die Zeichenfolge ersetzen, die sich am 3. Parameter befindet. Leider kann ich nicht einfach einen stringreplace auf irgendeinen Sub-String auf der 3. Position verwenden, da der gleiche 'Sub-String' irgendwo anders in diesem String sein könnte.
mit diesem und einem re.findall,
%Vor%Ich konnte den Inhalt der Teilzeichenkette an die 3. Stelle bringen, aber re_ ersetzt nicht die Zeichenkette, sondern gibt nur die Zeichenkette zurück, die ich ersetzen möchte: /
hier ist mein Code
%Vor%irgendeine Idee, was ich verpasst habe?
danke! Seb
In re, müssen Sie eine Ersetzung für die gesamte übereinstimmende Zeichenfolge angeben. Das bedeutet, dass Sie die Teile wiederholen müssen, die Sie nicht ersetzen möchten. Das funktioniert:
%Vor%Wenn dein einziges Werkzeug ein Hammer ist, sehen alle Probleme wie Nägel aus. Ein regulärer Ausdruck ist ein kraftvoller Hammer, ist aber nicht das beste Werkzeug für jede Aufgabe.
Einige Aufgaben werden besser von einem Parser gehandhabt. In diesem Fall ist die Argumentliste in der Zeichenfolge wie ein Python-Tupel, so dass Sie schummeln können: Verwenden Sie den integrierten Python-Parser:
%Vor%Wenn Sie der Eingabe nicht vertrauen können, ist ast.literal_eval sicherer als eval . Sobald Sie die Argumentliste in der dekonstruierten Zeichenkette haben, denke ich, dass Sie herausfinden können, wie Sie sie bei Bedarf wieder manipulieren und neu zusammensetzen können.
Lesen Sie die Dokumentation: re.sub
gibt eine Kopie der Zeichenfolge zurück, in der jedes Vorkommen des gesamten Musters durch die Ersetzung ersetzt wird. Es kann auf keinen Fall den ursprünglichen String ändern, da Python-Strings unveränderlich sind.
Verwenden Sie Look-Ahead- und Look-Behind-Assertionen, um eine Regex zu erstellen, die nur mit dem Element selbst übereinstimmt:
%Vor%