Wie benutzt du eine Regex in einem Listenverständnis in Python?

7

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

    
Adam 11.02.2013, 19:12
quelle

2 Antworten

15

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:

%Vor%     
Rohit Jain 11.02.2013, 19:13
quelle
4

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:

%Vor%

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:

%Vor%

Wie in den Kommentaren erwähnt, könnte das folgende eine bessere Option sein:

%Vor%     
georg 11.02.2013 19:15
quelle

Tags und Links