为了账号安全,请及时绑定邮箱和手机立即绑定

带组的正则表达式管道分隔符

带组的正则表达式管道分隔符

炎炎设计 2023-07-05 11:10:45
我的 URL 中有一个未编码的 URL。看起来像这样https://myhost.mydomain.com/pnLVyL7HjrxMlxjBQkhcOMr2WUs=/400x400/https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png我的域名可以是mydomain.com或mydomain.io. 此外,该/400x400/部件实际上可能会有所不同并且相似,/blahblah/XxY/blahblah或者可能完全缺失。图像可以是jpg, jpeg, png我想提取最后的 URL 的第二部分https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png我有这样的正则表达式https://myhost.mydomain.com/[a-zA-Z0-9=]*/.+[\/a-zA-Z0-9]?(/https://[a-zA-Z0-9=-]*.mydomain.(com|io)/images/[a-zA-Z0-9-]*.(png|jpg|jpeg))这将其标识为 4 组但是,我想将第二个 URL 作为一个组提取 - 所以整个https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png你能帮我修复我的正则表达式吗?谢谢 !
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

尝试使用


import re


s = "https://myhost.mydomain.com/pnLVyL7HjrxMlxjBQkhcOMr2WUs=/400x400/https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png"


m = re.search(r"https://.+(https.+)$", s)

if m:

    print(m.group(1))

输出:


https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png


查看完整回答
反对 回复 2023-07-05
?
隔江千里

TA贡献1906条经验 获得超10个赞

我建议采用这种方法:


https?(?!.*https?):\/\/.*\bmydomain\.(?:com|io).*

此正则表达式使用负向前查找来确保我们匹配的 URL 是输入字符串中的最后一个。示例脚本:


inp = "https://myhost.mydomain.com/pnLVyL7HjrxMlxjBQkhcOMr2WUs=/400x400/https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png"

url = re.findall(r'https?(?!.*https?):\/\/.*\bmydomain\.(?:com|io).*', inp)[0]

print(url)

这打印:


https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png


查看完整回答
反对 回复 2023-07-05
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

由于有 2 个链接,您可以匹配第一个链接并捕获组 1 中的第二个链接。

https?://myhost\.mydomain\.(?:com|io)/\S*?(https?://myhost\.mydomain\.(?:com|io)/\S*\.(?:jpe?g|png))
  • https?://myhost\.mydomain\.(?:com|io)/匹配第一个链接的开头

  • \S*?匹配 0+ 次非空白字符非贪婪

  • (捕获组 1

    • https?://myhost\.mydomain\.(?:com|io)/匹配第二个链接的开头

    • \S*匹配 0+ 次非空白字符

    • \.(?:jpe?g|png)匹配 .jpg 或 .jpeg 或 .png

  • )关闭组 1

正则表达式演示Python演示

例如

import re


regex = r"https?://myhost\.mydomain\.(?:com|io)/\S*?(https?://myhost\.mydomain\.(?:com|io)/\S*\.(?:jpe?g|png))"

test_str = ("https://myhost.mydomain.com/pnLVyL7HjrxMlxjBQkhcOMr2WUs=/400x400/https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png")


matches = re.search(regex, test_str)


if matches:

    print(matches.group(1))

输出


https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png


查看完整回答
反对 回复 2023-07-05
  • 3 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信