Python Regex不会在一场比赛中取得所有分组

时间:2019-02-25 10:22:11

标签: python regex

我在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 :(得分:7)

我不确定您会找到一个RE来做到这一点,但是您可以尝试两个。首先,您将字符串与以下项匹配:

(unsubscribe|opt out)(.*)

然后从该匹配项中提取第2组。然后通过第二个RE泵送第2组:

(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/

我已添加书签以快速测试这种情况。