Я пытаюсь преобразовать несколько совпадений в абзаце в ссылки, сохраняя окружающий текст в моем конечном выводе.Шаблон, который я сопоставляю, напоминает синтаксис гиперссылки для Markdown как способ, позволяющий нетехническим пользователям определять, какой текст они хотели бы связать во входных данных (Google Sheet, к которому я обращаюсь через Sheets API / Python).Первая группа, которую я собираю - это связанный текст, а вторая - это значение ключа в строке запроса.
Мне удалось успешно сопоставить один экземпляр этого шаблона, но моя замещающая строка заменяетвесь мой абзац в выходных данных.
text = "2018 was a big year for my sourdough starter and me. Mostly
we worked on developing this [tangy bread](19928) and these [chewy
rolls] (9843). But we were also just content keeping each other
company and inspired to bake."
def link_inline(text):
# expand a proper link around recipe id
ref = re.search(r"(\[.*?\]\(\d+\))", text, re.MULTILINE).group(1)
if (len(ref) > 0):
link = re.sub("\[(.*?)\]\((\d+)\)", r"<a href='https://www.foo.com/recipes?rid=\2'>\1</a>", ref)
return text
else:
return "replacement failed"
Цель состоит в том, чтобы этот вывод не затрагивал абзац и просто заменял совпадения шаблона \[(.*?)\]\((\d+)\)
на следующую строку, включая обратные ссылки для групп: <a href="https://www.foo.com?bar=\2">\1</a>
Таким образом, он должен будет циклически проходить по тексту, чтобы заменить все совпадения (предположительно с re.finditer
?), А также сохранить исходный текст вне совпадения с образцом.Но я не уверен, как правильно определить цикл и выполнить эту замену, не перезаписывая весь абзац только моей строкой замены.