Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como seria para validar uma Url genérica

Na aula, o professor utiliza o seguinte padrão para validar se a url é válida.

padrao = re.compile(“(http(s)?://)?(www.)?bytebank.com(.br)?”)

Mas como faríamos para validar qualquer url? Neste caso, no lugar de bytebank, poderia ser qualquer outro endereço. Como eu poderia especificar que meu padrão pode conter qualquer caracter n vezes?

Algo como:

padrao = re.compile(“(http(s)?://)?(www.)?(qualquer string).com(.br)?”)
4 respostas

Desde que tenha um ? após os parênteteses

padrao = re.compile(“(http(s)?://)?(www.)?(qualquerstring)?.com(.br)?”)

Não, mas daí eu preciso especificar o "qualquerstring" certo?

O que eu quero é poder passar qualquer url... www.abc.com ou www.google.com ou www.facebook.com, etc.

Para qualquer uma dessas Url eu obteria um "match". Como colocar no padrão que qualquer string é aceitável?

solução!

Ah sim...

Nos seus exemplos no caso você está querendo validar apenas o "www." e o ".com" por exemplo, o que está entre eles você quer ignorar:

padrao_url = re.compile('(www.)IGNORAR(.com)')

Aqui você possui uma alternativa de solução, já que o domínio entre as condições (www. e .com) não interessa na validação, você pode recortar a URL nesse pedaço e adicionar ela em uma variável que vamos chamar de pattern, e adicionar essa variável dentro da condição. por exemplo:

url = 'www.facebook.com'
pattern = 'facebook'
padrao_url = re.compile(f'(www.){pattern}(.com)')

ou

url = 'www.google.com'
pattern = 'google'
padrao_url = re.compile(f'(www.){pattern}(.com)')

Ah boa!! Agora deu certo.. Valeu !!! Coloquei também uma condição pra extrair a pattern automaticamente(Nesse caso desconsiderando a possibilidade de haver um https://).

url = 'www.google.com'

if 'www.' in url:
    index_start = url.find('www.') + len('www.')
else:
    index_start = 0

index_end = url.find('.com')

pattern = url[index_start:index_end]

url_pattern = re.compile(f'(www.){pattern}(.com)')