python - 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 作为一个组获取?
解决方案
我不确定您是否会找到一个 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
这里有一个很棒的正则表达式测试器:
我已经为快速测试此类场景添加了书签。
推荐阅读
- android - Mapbox 不断崩溃
- r - R Studio:〜作为情节()中的“意外输入”
- git - Heroku 部署 - 无法读取用户名
- timer - 无法为 samr30-xplained 启用 GCLK 生成器(使用 RIOT OS)
- c - While 循环和嵌套 if 不能一起工作
- javascript - 在flipclock.js倒数计时器停止后修改页面文本
- asp.net - 删除 http://localhost:54178/api/employees 405(方法不允许)
- java - 从 Java 运行 Python 脚本并传递用户输入
- javascript - 如何重定向到外部 MP4 文件链接
- spring-boot - 如何使用 Spring Boot Web 客户端为内容类型 application/x-www-form-urlencoded 的表单数据发布请求