我遇到了一个问题,因为密码打印在日志中。我无法控制日志的来源,所以我唯一的选择就是进行替换。
我有以下字符串a = "http://user:password@someurl.ip.com"
我想使用正则表达式将密码替换为"*****"
类似的东西
b = re.sub('(?<=:)(.*?)(?=@)', '********', a)
我的问题是我从第一个":"
匹配,所以我要替换"//user:password"
而不是"password"
如何调整regex以实现我想要的目标?
您可以排除使用否定字符类匹配:
和@
的可能性
(?<=:)[^:@]+(?=@)
Regex演示
import re
a = "http://user:password@someurl.ip.com"
b = re.sub('(?<=:)[^:@]+(?=@)', '********', a)
print(b)
输出
http://user:********@someurl.ip.com
或者可能使用更具体的匹配,使用捕获组来匹配协议:
import re
a = "http://user:password@someurl.ip.com"
b = re.sub(r"b(https?://[^:]+:)[^:@]+(?=@)", r"1********", a)
print(b)