假设我想在“文本”中查找所有信用卡号,并将前三个 4 位数字组替换为 XXXX,最后一组保持原样。
我如何使用 re.sub() 执行此操作?
到目前为止我最好的尝试是
re.sub(r"(\d{4}-){3}", "XXXX-XXXX-XXXX-", text)
当然,这种模式会导致非信用卡表达式的替换,例如“1234-5678-1234-asdfg”。
最佳答案
您可以使用先行断言:
re.sub(r"(\d{4}-){3}(?=\d{4})", "XXXX-XXXX-XXXX-", text)
例如:
In [1]: import re
In [2]: text = '1234-5678-9101-1213 1415-1617-1819-hello'
In [3]: re.sub(r"(\d{4}-){3}(?=\d{4})", "XXXX-XXXX-XXXX-", text)
Out[3]: 'XXXX-XXXX-XXXX-1213 1415-1617-1819-hello'
虽然这也匹配 asdf1234-4567-1234-4567-asdf。
关于python - 部分替换为 re.sub(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327590/