LINUX.ORG.RU

Регэкспы. Как переделать маркдаун ссылку в хтмл?

 


0

2

Регексп для переделывания маркдаун ссылки в хтмл неправильно работает если в ссылке есть скобки, точнее если на конце ссылки есть скобка )

text = re.sub(r'\[([^\]]*)\]\(([^\)]*)\)', r'<a href="\2">\1</a>', text)

[hi](https://example.com/123(123))
получается
<a href="https://example.com/123(123">hi</a>)

★★

Нежадные квантификаторы.

In [5]: re.sub(r'\[(.*?)\]\((.*?)\)', r'<a href="\2">\1</a>', 'Links:\n* [google](https://google.com)')
Out[5]: 'Links:\n* <a href="https://google.com">google</a>'

А на (...(...)) можно забить, так как в URL они не используются. Чтобы их обрабатывать уже нужно честный парсер писать. Можешь тут вдохновения зачерпнуть

rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 3)
Ответ на: комментарий от wandrien

Думаю в синтаксисе маркдауна следует скобку заменить на %29 и дело не в регэкспах а в том что иначе ссылка и правда закончится на 123.

Но парсинг синтаксиса регэкспами это в любом случае костыльная плохая идея.

firkax ★★★★★
()
Ответ на: комментарий от wandrien

Ой, регекспами calibre книжки парсит (правда часть фич там потому принципиально и не реализована, зато оно есть здесь и сейчас), а вы всё не подходит, не подходит.

peregrine ★★★★★
()
Ответ на: комментарий от wandrien

Потому что маркдаун – говно, а регэкспы не подходят для таких вещей.

https://example.com/123),hi — пример корректной ссылки. Ваши действия?

нормально всё работает

[hi](https://example.com/123),hi)
->
<a href="https://example.com/123),hi">hi</a>

theurs ★★
() автор топика
Последнее исправление: theurs (всего исправлений: 1)