Python中含Windows路径的正则替换问题求解
解决Python re.sub替换URL子字符串时的反斜杠问题
问题原因
你的代码中re.sub抛出KeyError,是因为rewrite参数里的反斜杠被re.sub当作正则表达式的转义序列解析(比如\w会被尝试解析为正则元字符,若没有对应规则就会报错)。而用repr处理后出现双反斜杠,是因为repr会把字符串中的单个反斜杠转义为双反斜杠用于显示,导致替换后的结果多出一层转义。
正确解决方案
方法1:使用lambda函数作为替换参数(推荐)
通过lambda函数直接返回原始的rewrite字符串,跳过re.sub对替换内容的转义解析,既避免报错,又能保留单个反斜杠:
import re string = "filename.txt" rewrite = "c:\\windows\\system32\\drivers\\hosts" url = "https://www.example.com/path?parameter=filename.txt" fullrewrite = re.sub(string, lambda _: rewrite, url) print(fullrewrite)
执行后输出:
https://www.example.com/path?parameter=c:\windows\system32\drivers\hosts
方法2:手动转义替换字符串中的反斜杠
如果不想用lambda,也可以把rewrite里的单个反斜杠转成双反斜杠,让re.sub解析后还原为单个反斜杠:
fullrewrite = re.sub(string, rewrite.replace('\\', r'\\'), url)
这种方法适合简单场景,但如果rewrite包含其他正则转义字符(如\1),仍可能出现问题,因此优先推荐方法1。
内容的提问来源于stack exchange,提问作者Tsauf
相关产品推荐
相关产品推荐

