J'utilise ce modèle pour correspondre à chaque URL d'une page Web donnée:
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)
Cela a assez bien fonctionné pour moi jusqu'à maintenant. J'ai trouvé que parfois, il ne correspond pas à l'URL exacte. Comme dans l'exemple, il correspond à l'URL https://example.com</p>
et https://example.com</font></a>
inlcuding les balises de fermeture mais je ne peux pas "comprendre le problème dans la regex. J'ai pris ce code à partir d'une autre question de pile.
Réponses:
0 pour la réponse № 1essaye ça,
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