Io uso questo modello per abbinare ogni url in una determinata pagina web:
import re
source = """
<p>https://example.com</p>
... some code
<font color="E80000">https://example.com</font></a>
"""
urls = re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", source)
Questo ha funzionato per me abbastanza bene fino ad ora. Ho scoperto che a volte non corrisponde all'URL esatto. Come nell'esempio, corrisponde all'URL https://example.com</p>
e https://example.com</font></a>
includendo i tag di chiusura ma non riesco a capire qual è il problema nella regex. Ho preso questo codice da un'altra domanda di stack.
risposte:
0 per risposta № 1prova questo,
import re
source = """
<p>https://example.com</p>
... some code
<font color="E80000">https://example.com</font>
https://example.com</p></a>
https://example.com</font></a>
"""
urls = re.findall("(http|ftp|https)://([w_-]+(?:(?:.[w_-]+)+))([w.,@?^=%&:/~+#-]*[w@?^=%&/~+#-])?", source)
print urls