import re
with open('index.html') as f:
data = f.read()
# Оставлю паттерн в этом виде, потому что пайчарм подсвечивает регулярки в связанных с ними функциях
url_pattern = re.compile(r'https?://([a-zA-Z0-9-_]+?\b\.)+([a-zA-Z0-9-_]+?\b)/?(([a-zA-Z0-9-_.]+?\b/)+([a-zA-Z0-9\-_.]+)/?)?')
# re.DOTALL нужен потому что в примере внутри тега с картинкой есть перевод строки,
# а . не матчит переносы. Можно было бы заменить ".*?" на "(\n|.)*?", но так может появиться
# лишняя группа в начале из-за чего искомая ссылка не будет гарантированно(!) первой сматченной группой.
pattern = re.compile(f'', re.DOTALL)
matches = re.findall(pattern, data)
links = list(map(lambda match: match[0], matches))
print(links)