我怎样才能告诉这个正则表达式忽略 www url 并捕获 ('Inter.ttf') 和 (Inter.ttf)
How can I tell this regex expression to ignore www urls and catch both ('Inter.ttf') and (Inter.ttf)
所以我目前有一个正则表达式,它通过将 '/static/user'
附加到每个 url 来替换 css urls。但是,我想让这个表达式忽略 www urls (https://www.google.com) 并捕获 url('Inter-Black.ttf') 和 url(Inter-Black.ttf), 带引号和不带引号。
这是我当前的代码:
p = re.compile(r"(?<=url\(')/?(?=(?:.*?\.\w{3})'\))")
filez = re.sub(p, '/static/user/', filez)
我也试过了,还是不行
p = re.compile(r"^(?!.*(www))(?<=url\(')/?(?=(?:.*?\.\w{3})'\))")
filez = re.sub(p, '/static/user/', filez)
目前使用此解决方案来捕获引号和非引号。但理想情况下,我想要一个更清洁的解决方案以及忽略 www urls.
的正则表达式
p = re.compile(r"(?<=url\(')/?(?=(?:.*?\.\w{3})'\))")
filez = re.sub(p, '/static/user/', filez)
p = re.compile(r"(?<=url\()/?(?=(?:.*?\.\w{3})\))")
filez = re.sub(p, '/static/user/', filez)
感谢您的宝贵时间。
希望有所帮助
import re
filez = """url(https://www.google.com)
url('Inter-Black.ttf')
url(Inter-Black.ttf)
"""
p = re.compile(r"(url\(\'?)((?!.*www).*\.\w{3})(\'?\))")
filez = re.sub(p, r'/static/user/', filez)
print(filez)
输出:
url(https://www.google.com)
url('/static/user/Inter-Black.ttf')
url(/static/user/Inter-Black.ttf)
您可以使用带有 if 子句的可选捕获组来说明开始 '
与结束 '
匹配
(url\()(?!https?://www\.google\.com)(')?/?([^()']*)((?(2)')\))
模式匹配:
(url\()
捕获 组 1,匹配 url(
(?!https?://www\.google\.com)
否定前瞻,断言不是特定的url
(')?
可选择在 组 2 中捕获 '
/?
可选择匹配前导 /
([^()']*)
捕获 组 3,匹配除 (
)
或 '
之外的任何字符
(
捕获 第 4 组
(?(2)')
If 子句检查组 2 是否存在,如果存在,则匹配 '
\)
匹配 )
)
关闭群组
import re
filez = """url(https://www.google.com)
url('Inter-Black.ttf')
url(Inter-Black.ttf)
url('Inter-Black.ttf)
url('/fonts/user/Inter-Black.ttf')
url('/fonts/user/mywebsite/Inter-Black.ttf')
"""
p = r"(url\()(?!https?://www\.google\.com)(')?/?([^()']*)((?(2)')\))"
filez = re.sub(p, r"/static/user/", filez)
print(filez)
输出
url(https://www.google.com)
url('/static/user/Inter-Black.ttf')
url(/static/user/Inter-Black.ttf)
url('Inter-Black.ttf)
url('/static/user/fonts/user/Inter-Black.ttf')
url('/static/user/fonts/user/mywebsite/Inter-Black.ttf')
所以我目前有一个正则表达式,它通过将 '/static/user'
附加到每个 url 来替换 css urls。但是,我想让这个表达式忽略 www urls (https://www.google.com) 并捕获 url('Inter-Black.ttf') 和 url(Inter-Black.ttf), 带引号和不带引号。
这是我当前的代码:
p = re.compile(r"(?<=url\(')/?(?=(?:.*?\.\w{3})'\))")
filez = re.sub(p, '/static/user/', filez)
我也试过了,还是不行
p = re.compile(r"^(?!.*(www))(?<=url\(')/?(?=(?:.*?\.\w{3})'\))")
filez = re.sub(p, '/static/user/', filez)
目前使用此解决方案来捕获引号和非引号。但理想情况下,我想要一个更清洁的解决方案以及忽略 www urls.
的正则表达式p = re.compile(r"(?<=url\(')/?(?=(?:.*?\.\w{3})'\))")
filez = re.sub(p, '/static/user/', filez)
p = re.compile(r"(?<=url\()/?(?=(?:.*?\.\w{3})\))")
filez = re.sub(p, '/static/user/', filez)
感谢您的宝贵时间。
希望有所帮助
import re
filez = """url(https://www.google.com)
url('Inter-Black.ttf')
url(Inter-Black.ttf)
"""
p = re.compile(r"(url\(\'?)((?!.*www).*\.\w{3})(\'?\))")
filez = re.sub(p, r'/static/user/', filez)
print(filez)
输出:
url(https://www.google.com)
url('/static/user/Inter-Black.ttf')
url(/static/user/Inter-Black.ttf)
您可以使用带有 if 子句的可选捕获组来说明开始 '
与结束 '
(url\()(?!https?://www\.google\.com)(')?/?([^()']*)((?(2)')\))
模式匹配:
(url\()
捕获 组 1,匹配url(
(?!https?://www\.google\.com)
否定前瞻,断言不是特定的url(')?
可选择在 组 2 中捕获 /?
可选择匹配前导/
([^()']*)
捕获 组 3,匹配除(
)
或'
之外的任何字符
(
捕获 第 4 组(?(2)')
If 子句检查组 2 是否存在,如果存在,则匹配'
\)
匹配)
)
关闭群组
'
import re
filez = """url(https://www.google.com)
url('Inter-Black.ttf')
url(Inter-Black.ttf)
url('Inter-Black.ttf)
url('/fonts/user/Inter-Black.ttf')
url('/fonts/user/mywebsite/Inter-Black.ttf')
"""
p = r"(url\()(?!https?://www\.google\.com)(')?/?([^()']*)((?(2)')\))"
filez = re.sub(p, r"/static/user/", filez)
print(filez)
输出
url(https://www.google.com)
url('/static/user/Inter-Black.ttf')
url(/static/user/Inter-Black.ttf)
url('Inter-Black.ttf)
url('/static/user/fonts/user/Inter-Black.ttf')
url('/static/user/fonts/user/mywebsite/Inter-Black.ttf')