Expressões regulares Python retornam verdadeiro / falso


114

Usando expressões regulares Python, como você pode obter um True/ Falseretornado? Todos os retornos do Python são:

<_sre.SRE_Match object at ...>

Respostas:


140

Matchobjetos são sempre verdadeiros e Nonesão retornados se não houver correspondência. Apenas teste a veracidade.

if re.match(...):

21
re.match (...) retornaria verdadeiro se a parte inicial da string corresponder ao padrão regular. Enquanto a pesquisa irá confirmar o padrão em qualquer lugar da string.
Yu Shen

8
Pode ser mais desejável usar em if re.match(...) is None:vez disso
NuclearPeon 01 de

desculpe, você respondeu aos comentários? Não está claro para mim, você se importa em esclarecer?
Charlie Parker

2
Posso perguntar por que 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?
ytu

1
@ytu: Porque então você pode fazer tudo o que precisar .
Ignacio Vazquez-Abrams

149

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


1
boolvalor é necessário quando a instrução condicional contém operação aritmética booleana. Ex: if (re.search ("a", "abc") & True):
Aizzat Suhardi

2
@AizzatSuhardi, &é uma operação bit a bit . andseria a operação booleana .
John La Rooy de

1
obrigado @JohnLaRooy. correção:(re.search("a","abc") and True)
Aizzat Suhardi

como isso é diferente da resposta de Ignacio?
Charlie Parker

2
O empacotamento booltorna a intenção do programador clara para o leitor.
Guilherme Salomé

10

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.


6

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.


Você sempre obtém um valor de retorno; Noneé o padrão se nada for retornado explicitamente.
Ignacio Vazquez-Abrams

Obrigado - corrigido isso. Eu estava apenas seguindo o que vi no REPL.
Gavin Anderegg

4

Aqui está o meu método:

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

sim e retorna "False"
Ufos

se você mudar matchpara search, ele retornará True
alofgran

1

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.