Le espressioni regolari di Python restituiscono vero / falso


114

Usando le espressioni regolari di Python come puoi ottenere un True/ Falserestituito? Tutti i risultati di Python sono:

<_sre.SRE_Match object at ...>

Risposte:


140

Matchgli oggetti sono sempre veri e Nonevengono restituiti se non c'è corrispondenza. Prova solo la veridicità.

if re.match(...):

21
re.match (...) restituirà true se la parte iniziale della stringa corrisponde al modello regolare. Mentre la ricerca confermerà il modello in qualsiasi punto della stringa.
Yu Shen

8
Potrebbe essere più desiderabile utilizzare if re.match(...) is None:invece
NuclearPeon

scusa, hai indirizzato i commenti nella tua risposta? Non mi è chiaro, ti dispiace chiarire?
Charlie Parker

2
Posso chiederti perché 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?
ytu

1
@ytu: Perché allora puoi fare tutto il necessario .
Ignacio Vazquez-Abrams

149

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()


1
boolvalore è necessario quando l'istruzione condizionale contiene un'operazione aritmetica booleana. ad esempio: if (re.search ("a", "abc") & True):
Aizzat Suhardi

2
@AizzatSuhardi, &è un'operazione bit per bit . andsarebbe l' operazione booleana .
John La Rooy

1
grazie @JohnLaRooy. correzione:(re.search("a","abc") and True)
Aizzat Suhardi

in che modo è diverso dalla risposta di ignacio?
Charlie Parker

2
Il wrapping boolrende chiara al lettore l'intenzione del programmatore.
Guilherme Salomé

10

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.


6

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.


È sempre ottiene un valore di ritorno; Noneè l'impostazione predefinita se non viene restituito nulla in modo esplicito.
Ignacio Vazquez-Abrams

Grazie - l'ho corretto. Stavo solo seguendo quello che ho visto nel REPL.
Gavin Anderegg

4

Ecco il mio metodo:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = re.comp il e (r'hi ') :-P
Clay

sì e restituisce "False"
UFO

se si matchpassa a search, verrà restituito True
alofgran

1

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.