2
respostas

Funcionamento do match()

Não ficou claro como o match() funciona, uma vez que no código é passado a URL completa inclusive com os parâmetros. Ele retornou algo porquê estava no inicio da string? Ou caso o padrão procurado estivesse no meio haveria erro?

    def valida_url(self):
        if not self.url: #chama o bool()
            raise ValueError("A URL está vazia")

        padrao_url = re.compile('(http(s)?://)?(www.)?bytebank.com(.br)?/(cambio)')
        match = padrao_url.match(self.url)

        if not match:
            raise ValueError("A URL não é válida")
        else:
            print("A URL é válida")

url = "bytebank.com/cambio?quantidade=100&moedaOrigem=real&moedaDestino=dolar"
2 respostas

Na verdade existem uns caracteres nas Expressões Regulares que servem justamente para dizer se o padrão deve também checar se é o início ou o final da cadeia de caracteres, respectivamente ^ e $.

Por exemplo, se você alterar a linha para:

padrao_url = re.compile('(http(s)?://)?(www.)?bytebank.com(.br)?/(cambio)$')

E rodar novamente o teste, vai ver que a aplicação acusará que a URL não é válida, já que não termina exatamente com /cambio.

Como o professor não usou esses caracteres, o match() acontece tanto para a URL que termina com /cambio quanto para uma que tenha um texto qualquer após.

Eden, na verdade o que o metodo match faz e verificar se o parametro que vc passou para ele confere com a expressão regular compilada.


Ex : 
url1 = www.bytebank.com
match = padrao_url.match(url1 )     math == True
url1 = www.bytebank.com,br
match = padrao_url.match(url1 )     math == True
url1 = www.bytebank.com/cambio
match = padrao_url.match(url1 )     math == True
url1 = www.bytebank.com.br/cambio
match = padrao_url.match(url1 )     math == True
url1 = www.bytebank.com
match = padrao_url.match(url1 )     math == True


url1 = www.bytebank.com/cambio&teste=errado
match = padrao_url.match(url1 )     math == False
url1 = www.bytebank.com&moeda=real
match = padrao_url.match(url1 )     math == False
url1 = www.bytebank.com.br/cambio&moeda=real 
match = padrao_url.match(url1 )     math == False
url1 = https:///www.bytebank.com
match = padrao_url.match(url1 )     math == False