regex 正则表达式查找字符串中的所有图像url

bvhaajcl  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(177)

我正在尝试构造一个正则表达式,它可以从一个字符串中找到所有的图片网址。图片网址可以是绝对路径,也可以是相对路径。
所有这些都应是有效匹配项:

../example/test.png
   
 https://www.test.com/abc.jpg
   
 images/test.webp

例如:如果我们定义

inputString="img src=https://www.test.com/abc.jpg background:../example/test.png <div> images/test.webp image.pnghello"

那么我们应该找到这3个匹配项:

https://www.test.com/abc.jpg
../example/test.png
images/test.webp

我目前正在做这个(我使用Python),它只找到绝对路径,只找到一些图像,有时也有不好的匹配(找到一个字符串,其中有一个图像的网址,但添加了很多东西,这是在图像的网址)

imageurls = re.findall(r'(?:"|\')((?:https?://|/)\S+\.(?:jpg|png|gif|jpeg|webp))(?:"|\')', inputString)
dced5bon

dced5bon1#

您可以尝试:

(?i)https?[^<>\s\'\"=]+(?:jpg|png|webp)\b|[^:<>\s\'\"=]+(?:jpg|png|webp)\b

Regex demo.

import re

s = '''img src=https://www.test.com/abc.jpg background:../example/test.png <div> images/test.webp image.pnghellobackground-image: url('../images/pics/mobile/img.JPG')'''
pat = re.compile(r'(?i)https?[^<>\s\'\"=]+(?:jpg|png|webp)\b|[^:<>\s\'\"=]+(?:jpg|png|webp)\b')

for m in pat.findall(s):
    print(m)

图纸:

https://www.test.com/abc.jpg
../example/test.png
images/test.webp
../images/pics/mobile/img.JPG
wj8zmpe1

wj8zmpe12#

你觉得怎么样:

re.findall(r'(?=:[^\S])?(?:https?://)?[\./]*[\w/\.]+\.(?:jpg|png|gif|jpeg|webp)', inputString)

其中:

"img src=http://another.org/hola.gif https://www.test.com/abc.jpg background:../example/test.png <div> images/test.webp image.pnghello"

给出:

['http://another.org/hola.gif',
 'https://www.test.com/abc.jpg',
 '../example/test.png',
 'images/test.webp',
 'image.png']

这可能需要更多的测试样本:)

相关问题