Ich versuche, alle Indexpositionen einer Zeichenfolge in einer Liste von Wörtern zu finden, und ich möchte, dass die Werte als Liste zurückgegeben werden. Ich möchte die Zeichenfolge finden, wenn sie allein ist, oder wenn Satzzeichen vorangestellt oder gefolgt wird, aber nicht, wenn es sich um einen Teilstring eines größeren Wortes handelt.
Der folgende Code erfasst nur "Kuh" nur und vermisst sowohl "Test; Kuh" und "Kuh."
%Vor%Ich habe versucht, den Code so zu ändern, dass er einen regulären Ausdruck verwendet:
%Vor%Aber das gibt einen Fehler: erwartete Zeichenfolge oder Puffer
Wenn jemand weiß, was ich falsch mache, wäre ich sehr glücklich zu hören. Ich habe das Gefühl, dass es etwas damit zu tun hat, dass ich versuche, dort einen regulären Ausdruck zu verwenden, wenn eine Saite erwartet wird. Gibt es eine Lösung?
Die Ausgabe, nach der ich suche, sollte lauten:
%Vor%Danke
Sie müssen das Ergebnis von match
nicht auf x
zurücksetzen. Und Ihre Übereinstimmung sollte auf x
und nicht auf list
stehen.
Außerdem müssen Sie re.search
anstelle von re.match
verwenden, da Ihr Regex-Muster '\W*myString\W*'
nicht mit dem ersten Element übereinstimmt. Das liegt daran, dass test;
nicht mit \W*
übereinstimmt. Tatsächlich müssen Sie nur für das unmittelbare nachfolgende und vorangehende Zeichen und nicht die vollständige Zeichenfolge testen.
Sie können also word boundaries
um den String herum verwenden:
Es gibt ein paar Probleme mit Ihrem Code. Zuerst müssen Sie den Ausdruck mit dem Listenelement ( x
) vergleichen, nicht mit der gesamten Liste ( myList
). Zweitens, um eine Variable in den Ausdruck einzufügen, müssen Sie +
(String-Verkettung) verwenden. Und schließlich, verwenden Sie rohe Literale ( r'\W
), um interpet Schrägstriche im Ausdruck:
Wenn es möglich ist, dass myString spezielle Regexp-Zeichen enthält (wie ein Schrägstrich oder ein Punkt), müssen Sie auch re.escape
darauf anwenden:
Wie in den Kommentaren erwähnt, könnte das folgende eine bessere Option sein:
%Vor%