/ / Python - URL di corrispondenza di Regex nel codice sorgente della pagina - python, regex

Python - URL di corrispondenza di Regex nel codice sorgente della pagina - python, regex

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 № 1

prova 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