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

我的 URL 中有一个未编码的 URL。看起来像这样

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

我的域名可以是mydomain.commydomain.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 组

http://img1.mukewang.com/64a4df4c0001a3c806460345.jpg

但是,我想将第二个 URL 作为一个组提取 - 所以整个https://myhost.mydomain.com/images/98f9a734-52e2-4616-adf7-bf0165bbf738.png

你能帮我修复我的正则表达式吗?谢谢 !


炎炎设计
浏览 98回答 3
3回答

慕少森

尝试使用import res = "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

隔江千里

我建议采用这种方法: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

海绵宝宝撒

由于有 2 个链接,您可以匹配第一个链接并捕获组 1 中的第二个链接。https?://myhost\.mydomain\.(?:com|io)/\S*?(https?://myhost\.mydomain\.(?:com|io)/\S*\.(?:jpe?g|png))https?://myhost\.mydomain\.(?:com|io)/匹配第一个链接的开头\S*?匹配 0+ 次非空白字符非贪婪(捕获组 1https?://myhost\.mydomain\.(?:com|io)/匹配第二个链接的开头\S*匹配 0+ 次非空白字符\.(?:jpe?g|png)匹配 .jpg 或 .jpeg 或 .png)关闭组 1正则表达式演示| Python演示例如import reregex = 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python