Python Regex не принимает все группы в матче - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть регулярное выражение в python, которое возвращает все ссылки http [s] с отказом от подписки или отказом перед ссылкой.

(unsubscribe|opt out).*(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))

Моя проблема: если в совпадении есть 2 ссылки, регулярное выражение будетвернуть последний, а не первый.Например,

blablablablabla unsubscribe blablabla http://link1.com blablabla http://link2.com

Ссылка 2 будет группой, а не ссылка 1

Кто-нибудь знает, как получить ссылку 1 в качестве группы ??

1 Ответ

0 голосов
/ 25 февраля 2019

Я не уверен, что вы найдете один RE для этого, но вы можете попробовать два.Сначала вы сопоставляете свою строку с:

(unsubscribe|opt out)(.*)

Затем извлекаете группу 2 из этого совпадения.И прокачайте группу 2 через второй RE:

(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))

, который вернет одно совпадение для каждой ссылки.Если я сделаю это с вашим примером, я получу:

Group 2 = blablablablabla unsubscribe blablabla http://link1.com blablabla http://link2.com

и затем на втором тесте:

Match 1, Group 1 = http://link1.com
Match 2, Group 1 = http://link2.com

Здесь есть потрясающий тестер регулярных выражений:

https://regex101.com/

То, что я добавил в закладки для быстрого тестирования таких сценариев.

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