使用正则表达式混淆含单引号的密码的技术问题
解决带转义单引号的Password字符串统一替换问题
嘿,我看到你在处理包含转义单引号(比如'')的password字符串替换时遇到了瓶颈——原来的正则表达式会在遇到第一个单引号就停止匹配,没法正确处理那些内嵌了''的密码内容。别担心,咱们来搞定它!
问题根源
你之前用的[^']+是匹配任意非单引号的字符,但当密码里出现''(用来表示转义的单个单引号)时,这个表达式会在第一个'就截断,导致匹配不完整,自然没法正确替换。
正确的正则方案
我们需要调整正则,让它能识别“两个连续单引号是转义字符”这种情况,而不是把单个单引号当作结束标记。这里是适配后的代码:
import re # 待处理字符串 input_str = "PASSWORD 'dsfad'、paSsword 'asdfa'、PAssWord 'asdrd'''、password 'asd''asdf'; password 'asdf'" # 编译正则表达式 pattern = re.compile(r"(?i)password\s*'(?:[^']|'')*'") # 执行替换 result = pattern.sub("password '*****'", input_str) print(result)
正则表达式拆解
让我们拆解一下这个正则的关键部分,帮你理解为什么它能工作:
(?i):开启忽略大小写模式,这样能匹配PASSWORD、paSsword、PAssWord等任意大小写组合的passwordpassword:匹配目标关键字(结合(?i)实现大小写不敏感)\s*:匹配0个或多个空格,兼容password'xxx'或者password 'xxx'这类格式':匹配密码开头的单引号(?:[^']|'')*:这是核心部分——非捕获组,匹配两种情况:[^']:任意非单引号的字符'':两个连续的单引号(转义后的单个单引号)*:重复匹配上述内容,直到遇到单独的单引号
':匹配密码结尾的单独单引号
替换效果测试
用你提供的测试字符串运行上面的代码,输出结果会是:
password '*****'、password '*****'、password '*****'、password '*****'; password '*****'
完全符合你想要的统一替换效果!
内容的提问来源于stack exchange,提问作者I am not smart
相关产品推荐
相关产品推荐

