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)