python - 部分替换为 re.sub()

标签 python regex

假设我想在“文本”中查找所有信用卡号,并将前三个 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/

相关文章:

python - 在 Python 中,从生成器构造循环子群

python - 如何合并 2 个 Shapely 对象?

python - 如何使 gunicorn 中的 worker 过期(并复活)?

PHP 通过引用传递数组元素

python - 将字符串重新渲染为原始字符串

Java ^ 正则表达式不匹配字符串中的新行

python - 不可散列类型 : 'numpy.ndarray' for optimization

python - 将 CSV 转换为 JSON。如何保持具有相同索引的值?

c - 如何从 C 中的字符串中删除 <it></in> 和 () 内的所有内容?

python - 我怎样才能在Python中分割这个字符串