Ich versuche, alle Sätze, die ein bestimmtes Wort enthalten, aus einem Text zu extrahieren.
%Vor%aber es gibt mir zurück:
%Vor%anstelle von:
%Vor%Irgendwelche Hilfe bitte?
Diese Zeile ist ein bisschen seltsam; Warum verketten Sie so viele getrennte Strings? Du könntest einfach r '.. + apple. +.'.
benutzen Wie auch immer, das Problem mit Ihrem regulären Ausdruck ist seine Greedy-Ness. Standardmäßig passt x+
x
so oft wie möglich an. Ihr .+
wird also so viele Zeichen wie möglich ( beliebige Zeichen) enthalten. einschließlich Punkte und apple
s.
Was Sie stattdessen verwenden möchten, ist ein nicht-gieriger Ausdruck; Sie können dies normalerweise tun, indem Sie am Ende ein ?
hinzufügen: .+?
.
Dadurch erhalten Sie das folgende Ergebnis:
%Vor% Wie du siehst, bekommst du nicht mehr beide Applesätze, sondern immer noch Me too.
. Das liegt daran, dass Sie immer noch den .
nach dem apple
zuordnen, was es unmöglich macht, auch den folgenden Satz nicht zu erfassen.
Ein funktionierender regulärer Ausdruck wäre dies: r'\.[^.]*?apple[^.]*?\.'
Hier sehen Sie nicht irgendwelche Zeichen, sondern nur die Zeichen, die selbst keine Punkte sind. Wir erlauben auch keine Übereinstimmung mit irgendwelchen Zeichen (weil nach dem apple
im ersten Satz keine Nicht-Punkt-Zeichen vorhanden sind). Die Verwendung dieses Ausdrucks führt dazu:
Offensichtlich ist das fragliche Beispiel extract sentence containing substring
anstelle von extract sentence containing word
. Wie man das extract sentence containing word
Problem durch Python löst, ist wie folgt:
Ein Wort kann am Anfang | Ende des Satzes stehen. Nicht auf das Beispiel in der Frage beschränkt, würde ich eine allgemeine Funktion zur Suche eines Wortes in einem Satz bieten:
%Vor%beschränkt auf das Beispiel in der Frage, können wir lösen wie:
%Vor%Die entsprechende Ausgabe ist:
%Vor%Tags und Links python regex text-segmentation