Wenn ich eine Zeichenfolge und einen Zeichenoffset innerhalb dieser Zeichenfolge angegeben habe, kann ich rückwärts mit einem regulären Python-Ausdruck suchen?
Das eigentliche Problem, das ich lösen möchte, ist, eine passende Phrase an einem bestimmten Offset innerhalb einer Zeichenkette zu bekommen, aber ich muss die erste Instanz vor dieser Verschiebung finden.
In einer Situation, in der ich eine Regex habe, die ein Symbol lang ist (z. B. eine Wortgrenze), verwende ich eine Lösung, bei der ich die Zeichenfolge umkehre.
%Vor%Ausgabe: 33
%Vor%Ausgabe: 25
%Vor%Ausgabe: 'Frage'
Diese "umgekehrte" Technik funktioniert jedoch nicht, wenn ich einen komplizierteren regulären Ausdruck habe, der mehrere Zeichen beinhalten kann. Zum Beispiel, wenn ich die erste Instanz von "ing" abgleichen wollte, die vor einem angegebenen Offset erscheint:
%Vor%Ideale Ausgabe: Fütterung
Ich kann wahrscheinlich andere Ansätze verwenden (die Datei in Zeilen aufteilen und rückwärts durch die Zeilen iterieren), aber die Verwendung eines regulären Ausdrucks rückwärts scheint eine konzeptionell einfachere Lösung zu sein.
Verwenden Sie positives Lookbehind, um sicherzustellen, dass vor einem Wort mindestens 30 Zeichen stehen:
%Vor%Für das andere Beispiel könnte ein negativer Lookbehind hilfreich sein:
%Vor% Das erste Greedy-Objekt passt auf ein beliebiges Zeichen außer Backtracks, bis es 16 Zeichen rückwärts nicht übereinstimmt ( (?<!.{16})
).
Wir können die Präferenz der python-Regex-Engine für Gier (etwas, nicht wirklich) nutzen und sagen, dass wir so viele Zeichen wie möglich haben wollen, aber nicht mehr als 30, dann ... .
Ein passender Regex kann dann r'^.{0,30}(\b)'
sein. Wir wollen den Beginn der ersten Erfassung.
Tags und Links python regex python-2.7