Risposte:
Matchgli oggetti sono sempre veri e Nonevengono restituiti se non c'è corrispondenza. Prova solo la veridicità.
if re.match(...):
if re.match(...) is None:invece
re è progettato in questo modo? Se gli matchoggetti sono sempre veri, perché non ritorna semplicemente Trueal primo posto, dato che dobbiamo sempre sapere se la risposta è comunque vera o falsa?
Se hai davvero bisogno True o False, usa semplicementebool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Come altre risposte hanno sottolineato, se lo stai usando solo come condizione per un ifo while, puoi usarlo direttamente senza avvolgerebool()
boolvalore è necessario quando l'istruzione condizionale contiene un'operazione aritmetica booleana. ad esempio: if (re.search ("a", "abc") & True):
&è un'operazione bit per bit . andsarebbe l' operazione booleana .
(re.search("a","abc") and True)
boolrende chiara al lettore l'intenzione del programmatore.
Ignacio Vazquez-Abrams ha ragione. Ma per elaborare, re.match()tornerà o None, che restituisce False, o un oggetto match, che sarà sempre Truecome ha detto. Solo se desideri informazioni sulle parti che corrispondono alla tua espressione regolare, devi controllare il contenuto dell'oggetto match.
Un modo per farlo è solo testare il valore restituito. Perché stai ricevendo <_sre.SRE_Match object at ...>significa che questo valuterà come vero. Quando l'espressione regolare non viene trovata, viene restituito il valore None, che restituisce false.
import re
if re.search("c", "abcdef"):
print "hi"
Produce hicome output.
Noneè l'impostazione predefinita se non viene restituito nulla in modo esplicito.
Puoi usare re.match()o re.search(). Python offre due diverse operazioni primitive basate su espressioni regolari: re.match()verifica la corrispondenza solo all'inizio della stringa, mentre re.search()verifica la corrispondenza in qualsiasi punto della stringa (questo è ciò che Perl fa di default). riferisci questo