我试图在css文件中找到所有相对网址,并用绝对网址替换它们。我知道如何获得绝对路径,但首先我需要找到文件中url()的所有出现,然后获取相对路径并用绝对路径替换它。这是我到目前为止所尝试的内容。
鉴于我的Css是:
css= "background:url(/pub-assets/img/index/sec8-bg.png)
src:url('../fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('../img/index/blok1-bg.jpg')"
我正在尝试这段代码:
start = "url("
end = ")"
print css[css.find(start)+len(start):css.rfind(end)]
但它不返回url而是遗憾地返回css代码。 谁能帮我这个。任何建议都非常感谢
答案 0 :(得分:1)
这将打印每个URL,假设字符串中没有任何迷路括号:
start = "url("
end = ")"
txt = css
start_pos = txt.find(start)
while start_pos >= 0:
end_pos = txt.find(end)
print(txt[start_pos+len(start):end_pos])
txt = txt[end_pos+len(end):]
start_pos = txt.find(start)
答案 1 :(得分:1)
使用正则表达式,例如:
import re
// ? = non-greedy
result = re.search( "url\(.+?\)", css)
print result.groups()
答案 2 :(得分:1)
使用正则表达式,您可以轻松列出每个网址。像那样:
import re
css= "background:url(/pub-assets/img/index/sec8-bg.png) \n src:url('../fonts/fontawesome-webfont.eot?v=4.6.3') \n background-image:url('../img/index/blok1-bg.jpg')"
re.findall(r'url\((.*?)\)', css)
['/pub-assets/img/index/sec8-bg.png',
"'../fonts/fontawesome-webfont.eot?v=4.6.3'",
"'../img/index/blok1-bg.jpg'"]
如果您想要索引,可以使用findIter而不是findall https://docs.python.org/2/library/re.html#re.finditer:
[(m.start(0), m.end(0)) for m in re.finditer(r'url\((.*?)\)', css)]
[(11, 49), (56, 103), (123, 155)]
答案 3 :(得分:0)
您也可以这样做:
1)我从pensflute稍微修改了正则表达式,因此它也不会抓取文字图像,例如“ url(data:image / png ..“)本身就是图像,因此不在外部还有一些网站不使用引号('')来包装网址,因为它也可以在不使用引号的情况下使用,因此我也在正则表达式中将其添加为可选内容。
2)比起从生成的列表中删除重复项,当您替换下一部分中的url时,这是必需的。
3)最后,我遍历了不需要用其绝对URL替换的URL列表,并使用urljoin()函数实现了这一点。 即使它们位于1级以上,这也会将所有链接解析为正确的格式,例如“ ../ images / someimg.png”
4)最后,您将拥有修改后的CSS,其中所有网址都是绝对的:)
import re
from urllib.parse import urljoin
cssUrl = 'https://www.example.nl/static/bundles/css/someApp.css'
css= "background:url(/pub-assets/img/index/sec8-bg.png) \n src:url('../fonts/fontawesome-webfont.eot?v=4.6.3') \n background-image:url('../img/index/blok1-bg.jpg') \n .grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}"
# 1) Find all css links
links = re.findall(r'url\(\'?([(..)/].*?)\'?\)', css)
# 2) Clear all duplicates
links = list(dict.fromkeys(links))
# print(links)
# 3) Replace all links with the absolute path
for link in links:
css = css.replace(link, urljoin(cssUrl, link))
# 4) Print out the modified css
print(css)
输出以下内容:
background:url(https://www.example.nl/pub-assets/img/index/sec8-bg.png)
src:url('https://www.example.nl/static/bundles/fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('https://www.example.nl/static/bundles/img/index/blok1-bg.jpg')
.grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}