Odpowiedzi:
Matchobiekty są zawsze prawdziwe i Nonesą 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 matchprzedmioty są zawsze prawdziwe, dlaczego po prostu nie wraca Truena pierwszym miejscu, skoro i tak zawsze musimy wiedzieć, czy odpowiedź jest prawdziwa, czy fałszywa?
Jeśli naprawdę potrzebujesz Truelub 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 iflub while, możesz użyć go bezpośrednio, bez zawijaniabool()
boolwartość jest potrzebna, gdy instrukcja warunkowa zawiera logiczną operację arytmetyczną. np .: if (re.search ("a", "abc") & True):
&jest operacją bitową . andbyłaby operacją boolowską .
(re.search("a","abc") and True)
boolsprawia, ż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, Truejak 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 hijako wyjście.
Nonejest 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