Respostas:
Matchobjetos são sempre verdadeiros e Nonesão retornados se não houver correspondência. Apenas teste a veracidade.
if re.match(...):
if re.match(...) is None:vez disso
re foi projetado assim? Se os matchobjetos são sempre verdadeiros, por que simplesmente não retorna Trueem primeiro lugar, visto que sempre precisamos saber se a resposta é verdadeira ou falsa de qualquer maneira?
Se você realmente precisa Trueou False, basta usarbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Como outras respostas apontaram, se você estiver usando-o apenas como uma condição para um ifou while, você pode usá-lo diretamente, sem envolver embool()
boolvalor é necessário quando a instrução condicional contém operação aritmética booleana. Ex: if (re.search ("a", "abc") & True):
&é uma operação bit a bit . andseria a operação booleana .
(re.search("a","abc") and True)
booltorna a intenção do programador clara para o leitor.
Ignacio Vazquez-Abrams está correto. Mas para elaborar, re.match()retornará ou None, que avalia para False, ou um objeto de correspondência, que será sempre Truecomo ele disse. Somente se você quiser informações sobre as partes que correspondem à sua expressão regular, você precisa verificar o conteúdo do objeto de correspondência.
Uma maneira de fazer isso é apenas testar o valor de retorno. Porque você está entendendo <_sre.SRE_Match object at ...>, significa que isso será avaliado como verdadeiro. Quando a expressão regular não for correspondida, você retornará o valor None, que é avaliado como false.
import re
if re.search("c", "abcdef"):
print "hi"
Produz hicomo saída.
Noneé o padrão se nada for retornado explicitamente.
Você pode usar re.match()ou re.search(). Python oferece duas operações primitivas diferentes baseadas em expressões regulares: re.match()verifica se há uma correspondência apenas no início da string, enquanto re.search()verifica se há uma correspondência em qualquer lugar da string (é isso que o Perl faz por padrão). consulte isso