Antworten:
Match
Objekte sind immer wahr und None
werden zurückgegeben, wenn keine Übereinstimmung vorliegt. Testen Sie einfach die Richtigkeit.
if re.match(...):
if re.match(...) is None:
stattdessen zu verwenden
re
so gestaltet ist? Wenn match
Objekte immer wahr sind, warum kehrt sie dann nicht gleich zurück True
, da wir immer wissen müssen, ob die Antwort überhaupt wahr oder falsch ist?
Wenn Sie wirklich brauchen True
oder False
, verwenden Sie einfachbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Wie andere Antworten bereits gezeigt haben , können Sie es direkt verwenden, ohne es einzuschließen , wenn Sie es nur als Bedingung für ein if
oder while
verwendenbool()
bool
Wert wird benötigt, wenn die bedingte Anweisung eine boolesche arithmetische Operation enthält. Beispiel: if (re.search ("a", "abc") & True):
&
ist eine bitweise Operation. and
wäre die boolesche Operation.
(re.search("a","abc") and True)
bool
macht dem Leser die Absicht des Programmierers klar.
Ignacio Vazquez-Abrams ist richtig. Aber um näher darauf einzugehen, re.match()
wird entweder zurückgegeben None
, was ausgewertet wird False
, oder ein Übereinstimmungsobjekt, das immer so sein wird, True
wie er es gesagt hat. Nur wenn Sie Informationen zu den Teilen wünschen, die Ihrem regulären Ausdruck entsprechen, müssen Sie den Inhalt des Übereinstimmungsobjekts überprüfen.
Eine Möglichkeit, dies zu tun, besteht darin, nur den Rückgabewert zu testen. Weil Sie es bekommen <_sre.SRE_Match object at ...>
, bedeutet dies, dass dies als wahr bewertet wird. Wenn der reguläre Ausdruck nicht übereinstimmt, erhalten Sie den Rückgabewert None, der als false ausgewertet wird.
import re
if re.search("c", "abcdef"):
print "hi"
Produziert hi
als Ausgabe.
None
ist die Standardeinstellung, wenn nichts explizit zurückgegeben wird.
Sie können re.match()
oder verwenden re.search()
. Python bietet zwei verschiedene primitive Operationen, die auf regulären Ausdrücken basieren: re.match()
Überprüft nur am Anfang der Zeichenfolge, re.search()
ob eine Übereinstimmung vorliegt , während an einer beliebigen Stelle in der Zeichenfolge nach einer Übereinstimmung gesucht wird (dies ist standardmäßig bei Perl der Fall). verweisen Sie dies