Python re "falscher Escape-Fehler"

7

Ich habe mich mit der Methode python re modules .search herumgeschlagen. cur ist die Eingabe eines Tkinter-Eintrags-Widgets. Immer wenn ich ein "\" in das Eingabe-Widget eintrage, wird dieser Fehler ausgegeben. Ich bin mir nicht sicher, was der Fehler ist oder wie man damit umgeht. Jede Einsicht würde sehr geschätzt werden.

cur ist eine Zeichenfolge

tup [0] ist auch eine Zeichenfolge

Snippet:

%Vor%

Der Fehler:

%Vor%     
rectangletangle 13.12.2010, 08:59
quelle

4 Antworten

12

"Schein-Escape (Zeilenende)" bedeutet, dass Ihr Muster mit einem umgekehrten Schrägstrich endet. Das hat nichts mit Tkinter zu tun. Sie können den Fehler ziemlich einfach in einer interaktiven Shell duplizieren:

%Vor%

Die Lösung? Stellen Sie sicher, dass Ihr Muster nicht mit einem einzelnen Backslash endet.

    
Bryan Oakley 13.12.2010, 12:04
quelle
12

Die Lösung für dieses Problem besteht darin, eine rohe Zeichenfolge als Ersatztext zu verwenden. Folgendes wird nicht funktionieren:

%Vor%

Es wird den Fehler werfen: Schein entkommen (Ende der Zeile)

Aber Folgendes wird gut funktionieren:

%Vor%

Nun stellt sich die Frage, wie Sie eine während der Programmlaufzeit erzeugte Zeichenkette in eine rohe Zeichenkette in Python konvertieren. Sie finden hier eine Lösung . Aber ich bevorzuge eine einfachere Methode, dies zu tun:

%Vor%

Die obige Methode kann nur ASCII- und Unicode-Zeichenfolgen in rohe Zeichenfolgen konvertieren. Nun, das hat für mich bis heute gut funktioniert:)

    
rtnpro 01.01.2012 09:59
quelle
3

Wenn Sie versuchen, in "tup [0]" nach "cur" zu suchen, sollten Sie dies über "try: ... excepted: ..." machen, um ein ungültiges Muster einzufangen:

%Vor%     
Taras 13.12.2010 09:27
quelle
3

Der erste zu regende Parameter ist das Muster, nach dem gesucht werden soll. Wenn also 'cur' einen Backslash am Ende der Zeile enthält, handelt es sich um eine ungültige Escape-Sequenz. Du hast wahrscheinlich deine Argumente ausgetauscht (ich weiß nicht, was tup [0] ist, aber ist es dein Muster?) Und es sollte so sein.

%Vor%

Da Sie sehr selten Benutzereingaben als Muster verwenden (es sei denn, Sie führen einen regulären Ausdruck durch, in welchem ​​Fall Sie den Fehler stattdessen anzeigen möchten).

HTH.

BEARBEITEN :
Der Fehler, den es meldet, ist, dass Sie ein Escape-Zeichen vor dem Ende der Zeile verwenden (was bogus escape (end of line) bedeutet), das heißt, Ihr Muster endet mit einem umgekehrten Schrägstrich, der kein gültiges Muster ist. Dem Escape-Zeichen (Backslash) muss ein weiteres Zeichen folgen, das dem Zeichen eine besondere Bedeutung hinzufügt oder hinzufügt (nicht sicher, wie Python es genau macht, posix macht Gruppen durch Hinzufügen von Escape zu Klammern, perl entfernt den Group-Effekt, indem es es löscht). Das ist \* entspricht einem literalen Stern, während * mindestens 0 Mal mit dem vorhergehenden Zeichen übereinstimmt.

    
falstro 13.12.2010 09:05
quelle

Tags und Links