我在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分组吗?
答案 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
这里有一个很棒的正则表达式测试器:
我已添加书签以快速测试这种情况。