[英]Python Regex to replace whole word including some special characters
我是正则表达式的新手,想知道如何实现以下内容。 例如,我有一个带有url('Inter.ttf')
的 css 文件,我的 python 程序会将此 url 转换为url('user/Inter.ttf')
但是,当我尝试避免双重替换时遇到了问题。 那么在使用 re.sub 替换它们时,如何使用正则表达式告诉 python url('Inter.ttf')
和url('/hello/Inter.ttf')
之间的区别。
我试过re.sub(r"\boriginalurl.ttf\b", "/user/" + originalurl.ttf, file)
。 但这似乎行不通。
那么我如何告诉 python 用'/user/Inter.ttf'
和'/hello/Inter.ttf'
替换整个单词'Inter.ttf'
' 和 ' '/user/hello/Inter.ttf'
。
您可以使用look-around
方法动态插入/user/
:
(?<=url\(')/*(?=(?:.*?Inter\.ttf)'\))
然后使用re.sub
替换为/user/
:
strings = ["url('Inter.ttf')", "url('/hello/Inter.ttf')"]
p = re.compile(r"(?<=url\(')/?(?=(?:.*?Inter\.ttf)'\))")
for s in strings:
s = re.sub(p, "/user/", s)
print(s)
url('user/Inter.ttf')
url('user/hello/Inter.ttf')
(?<=url\(')
: Positive lookbehind; 匹配像url('
这样的字符串之后的字符串。
/?
: 匹配零个或一个正斜杠/
。 这对于匹配/hello/Inter.ttf
之类的路径很重要,因为它以/
开头。 这将被选中并替换为替换字符串/user/
中的结尾正斜杠。
(?=(?:.*?Inter.ttf)'\)
:正向前瞻; 匹配以Inter.ttf')
结尾的字符串之前的字符串。
我建议在https://regex101.com上使用它,选择左侧的Substitution
方法。
如果要匹配多个 fonts,只需删除正则表达式的Inter.ttf
部分:
(?<=url\(')/?(?=(?:.*?)'\))
或者,如果您希望将 append /user/
替换为具有文件扩展名的路径,您可以将Inter\.ttf
替换为\.\w{3}
,它有效匹配[a-zA-Z0-9_]
:
(?<=url\(')/?(?=(?:.*?\.\w{3})'\))
没有正则表达式的简单方法是这样的:
fin = open("input.css", "rt")
fout = open("out.css", "wt")
for line in fin:
if "'Inter.ttf'" in line:
fout.write(line.replace("'Inter.ttf'", "'/user/Inter.ttf'"))
elif "'/hello/Inter.ttf'" in line:
fout.write(line.replace("'/hello/Inter.ttf'", "'/user/hello/Inter.ttf'"))
else:
fout.write(line)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.