簡體   English   中英

部分替換為 re.sub()

[英]Partial replacement with re.sub()

假設我想在“文本”中找到所有信用卡號,並用 XXXX 替換前三個 4 位數字組,保留最后一組。

我怎樣才能用 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。

使用反向引用的另一種方法:

data = "4220-1234-9948-2245 is a cc num i have and so is 4153-4222-3942-4852 but dont tell anyone"
print re.sub(r"(\d{4}-){3}(\d{4})", "XXXX-XXXX-XXXX-\\2", data)

# XXXX-XXXX-XXXX-2245 is a cc num i have and so is XXXX-XXXX-XXXX-4852 but dont tell anyone

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM