Регекс слишком жадный.Не могу найти способ это исправить - PullRequest
0 голосов
/ 30 декабря 2018

Есть ли способ исправить следующее регулярное выражение?Я включил пример в regex101.В основном он захватывает слишком много и неправильную часть между тегами ()[].Он делает то, что должен, но я теряю текст и другой тег.

https://regex101.com/r/OPRCuh/1

регулярное выражение:

\[(.+?)\]\((https.+?)\)

образец текста

_“[Developer Interview](/blog/tags/developer_interview.html)” is a new series here at Semaphore blog. We’ll interview developers from some of the companies using [text text text](https://textapp.com) to find out how they work and share their insights with you.

1 Ответ

0 голосов
/ 30 декабря 2018

Шаблон . соответствует любому символу, кроме символа разрыва строки.Таким образом, он может совпадать с [, ], ( и ), пока не найдет действительное совпадение.Поскольку регулярное выражение анализирует строку слева направо, механизм регулярных выражений находит первое [, а затем находит ] после Interview, затем находит ( до /blog, но отказывается от него, поскольку за ним не следуетhttps, но все еще продолжает сопоставлять символы, пока не найдет (https и, следовательно, не вернет действительное совпадение.

Вы можете использовать

r'\[([^][]*)]\((https[^()]*)\)'

См. Демонстрационную версию regex

Шаблон [^][]* соответствует 0+ символам, отличным от [ и ] и [^()]*, соответствует 0+ символам, отличным от ( и ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...