regex以获取2个字符之间的子字符串的最后一次出现



我遇到了一个问题,因为密码打印在日志中。我无法控制日志的来源,所以我唯一的选择就是进行替换。

我有以下字符串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)

相关内容

最新更新