Python Regex - Warum funktioniert das Ende von String ($ und \ Z) nicht mit Gruppenausdrücken?

8

In Python 2.6. Es scheint, dass Markierungen am Ende der Zeichenfolge $ und \Z nicht mit Gruppenausdrücken kompatibel sind. Fo Beispiel

%Vor%

gibt

zurück %Vor%

(so funktioniert $ effektiv nicht). Und mit

%Vor%

führt zu einem Fehler:

%Vor%

Warum funktioniert es so und wie geht es?

    
Piotr Migdal 06.10.2012, 20:25
quelle

3 Antworten

22

Ein [..] Ausdruck ist eine Zeichengruppe , was bedeutet, dass er mit jedem darin enthaltenen Zeichen übereinstimmt. Sie stimmen also mit einem Literal $ -Zeichen überein. Eine Zeichengruppe gilt immer für ein Eingabezeichen und kann daher niemals einen Anker enthalten.

Wenn Sie entweder das Zeichen whitespace oder am Ende der Zeichenkette suchen möchten, verwenden Sie stattdessen eine nicht erfassende Gruppe, kombiniert mit | oder selector:

%Vor%

Sehen Sie sich alternativ den Wortgrenzenanker \b an. Es passt überall dort, wo eine \w -Gruppe beginnt oder endet (also an Punkten im Text verankert, an denen einem \w -Zeichen ein \W -Zeichen vorausgeht oder folgt oder am Anfang oder Ende der Zeichenfolge steht) .

    
Martijn Pieters 06.10.2012, 20:27
quelle
3

Eckige Klammern geben keine Gruppe an, sie geben einen Zeichensatz an, der eins Zeichen entspricht (eines davon in den Klammern). Wie documented , "Sonderzeichen verlieren ihre besondere Bedeutung innerhalb von Mengen" (sofern nicht anders angegeben als bei Klassen wie \s ).

Wenn Sie \s oder das Ende von string anpassen möchten, verwenden Sie etwas wie \s|$ .

    
BrenBarn 06.10.2012 20:30
quelle
0

Die Antwort von Martijn Pieters ist richtig. Etwas ausführlicher, wenn Sie einfangende Gruppen verwenden

%Vor%

Sie erhalten:

%Vor%

Das liegt daran, dass re.findall() die Werte der erfassten Gruppe (\s|$) zurückgibt.

Klammern () werden für zwei Zwecke verwendet : Zeichengruppen und erfasste Gruppen. Um gefangene Gruppen zu deaktivieren, aber immer noch als Zeichengruppen zu fungieren, verwenden Sie (?:...) syntax:

%Vor%     
Junji Zhi 09.05.2017 17:20
quelle

Tags und Links