2016-10-04 2 views
0

Können Sie mir helfen zu verstehen, warum print(truth(prog.match(text, 0, 6))) gleich wahr ist?Regex: kann das Endpos nicht verstehen

import re 
from operator import truth 

prog = re.compile(r'<HTML>$') 
text = "<HTML>   " 
print("Last symbol: {}".format(len('<HTML>')-1)) 
print(truth(prog.match(text, 0, 6))) 
print(truth(prog.match(text))) 
+3

Was ist 'Wahrheit'? Meinst du bool? – orlp

+0

'Wahrheit' ist keine eingebaute: entweder gibt es Code fehlt oder das ist nicht gleich 'True' ... – brianpck

+0

@brianpck Ups. – orlp

Antwort

1

Wenn Sie die match(text, startpos, endpos) Methode einer kompilierten Regex verwenden, wird es als handeln, wenn Sie match(text[startpos:endpos]) bestanden haben (gut, not exactly, aber für die Zwecke der $, es ist). Das bedeutet, dass es denkt, ist am Ende der Eingabe (das ist, was $ übereinstimmt).

Wenn dies jedoch nicht der Fall ist, verhindert das zusätzliche Leerzeichen am Ende von text$ die Übereinstimmung, sodass keine Übereinstimmung gefunden wird.

+0

Hm, es erklärt die Situation gut. Diese Funktion ist nicht dokumentiert, oder? – Michael

+0

@Michael [Es ist] (https://docs.python.org/3/library/re.html#re.regex.match). – orlp

+0

In der Dokumentation: pos und endpos Parameter begrenzen den Suchbereich. Ich würde sagen, dass es nicht geschrieben ist, dass es wie schneiden funktioniert. Übrigens, wenn es wie schneiden funktioniert, können wir nicht den gleichen Effekt mit dem Anfang sehen? text = "" drucken (Wahrheit (prog.match (Text, 1))) – Michael