【问题标题】:Securing Credit Card numbers in python using RE使用 RE 在 python 中保护信用卡号
【发布时间】:2015-08-25 13:08:55
【问题描述】:

我试图通过用星号掩盖中间 4 位数字来掩盖信用卡号。我正在尝试在 python 中使用 RE 来解决这个问题。

5415********4935

虽然我已经弄清楚如何执行上述操作。输出为我提供了一系列没有任何逗号的信用卡号

['5415********4935\r\n5275********9664\r\n5206********3509\r\n5332********3074\r\n5204********2617']

我需要在哪里更改代码才能获得以下输出

['5415********4935,5275********9664,5206********3509,5332********3074,5204********2617']

我的示例代码:

import re,pyperclip

CreditRegex = re.compile(r'''(
(\d{4})
(\s*|\-*)
(\d{4})
(\s*|\-*)
(\d{4})
(\s*|\-*)
(\d{4})

)''',re.VERBOSE)

text = str(pyperclip.paste())
matches=[]

for groups in [CreditRegex.sub(r'\2********\8',text)]:

    groups.rstrip()
    matches.append(groups)

print(matches)

【问题讨论】:

  • 您真的希望这是一个包含一个元素的列表吗?或者你想要一个字符串列表——每个信用卡号都是列表中的一个单独元素?看看我的回答。

标签: python regex


【解决方案1】:

你可以使用str.replace()函数

>>> lst = ['5415********4935\r\n5275********9664\r\n5206********3509\r\n5332********3074\r\n5204********2617']

>>> [ lst[0].replace('\r\n', ',') ]
['5415********4935,5275********9664,5206********3509,5332********3074,5204********2617']

【讨论】:

    【解决方案2】:

    使用替换的最简单方法:

    x = ['5415********4935\r\n5275********9664\r\n5206********3509\r\n5332********3074\r\n5204********2617']
    x[0] = x[0].replace("\r\n",',')
    print x
    #prints ['5415********4935,5275********9664,5206********3509,5332********3074,5204********2617']
    

    【讨论】:

    • 代码中是否有问题导致无法自动执行上述操作?
    • 取决于text 的样子
    • 我真的怀疑期望的结果是得到一个包含一个元素的列表,该元素是包含所有用逗号分隔的数字的字符串...
    【解决方案3】:
    import re,pyperclip
    
    CreditRegex = re.compile(r'''(
    (\d{4})
    (\s*|\-*)
    (\d{4})
    (\s*|\-*)
    (\d{4})
    (\s*|\-*)
    (\d{4})
    
    )''',re.VERBOSE)
    
    text = str(pyperclip.paste())
    matches=[]
    
    for groups in [CreditRegex.sub(r'\2********\8',text)]:
    
        groups.rstrip()
        matches.append(groups)
    
    print matches
    

    从打印中删除 ()。

    【讨论】:

      【解决方案4】:

      我不太明白这里需要正则表达式。

      import pyperclip
      
      out = [
          '{}********{}'.format(num[:4], num[8:])
          for num in str(pyperclip.paste()).splitlines()
      ]
      print out
      

      如您所见,您所需要的只是标准的字符串操作。
      我发现在这里使用列表推导很方便,但这是另一回事。

      【讨论】:

      • 这更容易。谢谢你。我使用正则表达式的原因是因为这是automatedtheboringstuff.com中的问题之一:)
      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2017-01-09
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多