Регулярные выражения. Поиск текста ссылки vk и замена на текст ссылку discord

мне нужен поиск текст-ссылок из vk и замена на discord текст-ссылку

import re

txt = "Какой-нибудь текст [https://vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст"
x = re.search("^https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,}|[a-zA-zа-яА-я]$", txt)
print(x)

Ответы (1 шт):

Автор решения: Namerek

Если правильно понял задачу то что-то такое должно получится

import re
from urllib.parse import unquote

links = [
    'Какой-нибудь текст [https://vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
    'Какой-нибудь текст [http://vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
    'Какой-нибудь текст [http://www.vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
    'Какой-нибудь текст [https://www.vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
]


pat = re.compile(r'\[(http.*?)]')

def convert_to_normal(item: str):
    link, text = item.split('|')

    return f'[{link}]({text})'

def fetch_link_n_header(item: str):
    return pat.sub(lambda x: convert_to_normal(x.group(1)), unquote(item))


print(
    *map(fetch_link_n_header, links),
    sep='\n'
)
# Какой-нибудь текст [https://vk.com/wall-80197218_1416981](удалят три способности) какой-нибудь текст
# Какой-нибудь текст [http://vk.com/wall-80197218_1416981](удалят три способности) какой-нибудь текст
# Какой-нибудь текст [http://www.vk.com/wall-80197218_1416981](удалят три способности) какой-нибудь текст
# Какой-нибудь текст [https://www.vk.com/wall-80197218_1416981](удалят три способности) какой-нибудь текст

UPD:

Немного упростил:

import re
from urllib.parse import unquote

links = [
    'Какой-нибудь текст [https://vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
    'Какой-нибудь текст [http://vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
    'Какой-нибудь текст [http://www.vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
    'Какой-нибудь текст [https://www.vk.com/wall-80197218_1416981%7Cудалят три способности] какой-нибудь текст',
]

pat = re.compile(r'\[(http.*?)\|(.*?)]')

def format_link(item: str):
    return pat.sub(r'[\1](\2)', unquote(item))

print(
    *map(format_link, links),
    sep='\n'
)
→ Ссылка