Odpowiedzi:
Match
obiekty są zawsze prawdziwe i None
są zwracane, jeśli nie ma dopasowania. Po prostu sprawdź poprawność.
if re.match(...):
if re.match(...) is None:
Zamiast tego może być bardziej pożądane
re
jest tak zaprojektowany? Jeśli match
przedmioty są zawsze prawdziwe, dlaczego po prostu nie wraca True
na pierwszym miejscu, skoro i tak zawsze musimy wiedzieć, czy odpowiedź jest prawdziwa, czy fałszywa?
Jeśli naprawdę potrzebujesz True
lub False
, po prostu użyjbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Jak wskazywały inne odpowiedzi, jeśli używasz go tylko jako warunku dla if
lub while
, możesz użyć go bezpośrednio, bez zawijaniabool()
bool
wartość jest potrzebna, gdy instrukcja warunkowa zawiera logiczną operację arytmetyczną. np .: if (re.search ("a", "abc") & True):
&
jest operacją bitową . and
byłaby operacją boolowską .
(re.search("a","abc") and True)
bool
sprawia, że intencja programisty jest jasna dla czytelnika.
Ignacio Vazquez-Abrams ma rację. Ale aby rozwinąć, re.match()
zwróci albo None
, który ocenia do False
, albo dopasowany obiekt, który zawsze będzie taki, True
jak powiedział. Tylko jeśli chcesz uzyskać informacje o częściach, które pasują do twojego wyrażenia regularnego, musisz sprawdzić zawartość obiektu dopasowania.
Jednym ze sposobów jest po prostu przetestowanie zwracanej wartości. Ponieważ otrzymujesz <_sre.SRE_Match object at ...>
to, oznacza to, że zostanie to ocenione jako prawda. Jeśli wyrażenie regularne nie zostanie dopasowane, zwrócona zostanie wartość None, której wynikiem jest false.
import re
if re.search("c", "abcdef"):
print "hi"
Produkuje hi
jako wyjście.
None
jest wartością domyślną, jeśli nic nie jest jawnie zwracane.
Możesz użyć re.match()
lub re.search()
. Python oferuje dwie różne operacje prymitywne oparte na wyrażeniach regularnych: re.match()
sprawdza dopasowanie tylko na początku ciągu, podczas gdy re.search()
sprawdza dopasowanie w dowolnym miejscu w ciągu (tak robi domyślnie Perl). odnieś to