我对regex很陌生,我正在尝试使用正则表达式将作为对话一部分的信用卡号转换为类似492900******2222
由于它可以来自任何对话,它旁边可能包含字符串或可能具有不一致的格式,因此基本上所有以下内容都应按照上面的示例格式化:
它需要是一个正则表达式,用于提取捕获组,然后我将能够使用MatchEvaluator将所有不是前6位和后4位的数字(不包括非数字)转换为*
我在这里看到了许多关于PHP和JS堆栈溢出的示例,但没有一个可以帮助我解决这个问题。
如有任何指导,我们将不胜感激
更新
我需要扩展现有的实现,它使用MatchEvalue ator来屏蔽不是前6个或最后4个的每个字符,理想情况下,我不想更改MatchEvalue ator,只是根据正则表达式使屏蔽灵活,请参阅此示例https://dotnetfiddle.net/J2LCo0
更新2
@马特。G和@CAustin的答案确实解决了我的要求,但我遇到了另一个障碍,我不能让它如此严格。最终捕获的组只需要考虑数字,并因此保持输入文本的格式。例如:
如果我的卡号中的某些类型为99 9988 8877776666,则评估的输出应为99 9988******666666
或者我的卡号是9999-8888-7777-6666,它应该输出9999-88**-**-6666。
这有可能吗?
如果性能是一个问题,这里有一个模式,它只经过94个步骤,而不是另一个答案的473个步骤,通过避免环顾和交替:
\d{4}[-]?\d{2}\K\d{2}[-]?\d{4}
演示:https://regex101.com/r/0XMluq/4
编辑:在C的正则表达式风格中,可以使用以下模式,因为C允许可变长度的查找。
<代码>(?
演示
尝试正则表达式:(?
正则表达式演示
C#演示
解释:
2 alternative regexes
(?<=\d{4}\d{2})\d{2}\d{4}(?=\d{4}) - to handle cardnumbers without any separators (- or <space>)
(?<=\d{4}( |-)\d{2})\d{2}\1\d{4}(?=\1\d{4}) - to handle cardnumbers with separator (- or <space>)
1st Alternative (?<=\d{4}\d{2})\d{2}\d{4}(?=\d{4})
Positive Lookbehind (?<=\d{4}\d{2}) - matches text that has 6 digits immediately behind it
\d{2} matches a digit (equal to [0-9])
{2} Quantifier — Matches exactly 2 times
\d{4} matches a digit (equal to [0-9])
{4} Quantifier — Matches exactly 4 times
Positive Lookahead (?=\d{4}) - matches text that is followed immediately by 4 digits
Assert that the Regex below matches
\d{4} matches a digit (equal to [0-9])
{4} Quantifier — Matches exactly 4 times
2nd Alternative (?<=\d{4}( |-)\d{2})\d{2}\1\d{4}(?=\1\d{4})
Positive Lookbehind (?<=\d{4}( |-)\d{2}) - matches text that has (4 digits followed by a separator followed by 2 digits) immediately behind it
1st Capturing Group ( |-) - get the separator as a capturing group, this is to check the next occurence of the separator using \1
\1 matches the same text as most recently matched by the 1st capturing group (separator, in this case)
Positive Lookahead (?=\1\d{4}) - matches text that is followed by separator and 4 digits
我的网站上有一个表格,我的客户用这个表格给我发信息。有时他们会在信息上写上他们的信用卡号。所以这真的很关键。我想掩盖这些信用卡号。但是当然卡号不会定期出现。 例1:1111222233334444 例2:4444 3333 2222 1111 例3:4444-3333-2222-1111 例4:4444-3333-2222-1111 例5:4444-3333-2222-1111 所以我可以屏蔽例如
问题内容: 我们的Web应用程序必须与PCI兼容,即,它不得存储任何信用卡号。该应用程序是大型机系统的前端,它在内部处理抄送号,并且-正如我们刚刚发现的那样- 有时仍会在其响应屏幕之一上吐出完整的抄送号。默认情况下,这些响应的全部内容都记录在调试级别,并且从这些响应解析的内容也可以记录在许多不同的位置。因此,我无法找到此类数据泄漏的根源。我必须确保CC号在我们的日志文件中被屏蔽。 正则表达式部分不
精明的加法学专家会注意到,它只能加到62位。我在编译器和芯片设计方面的经历告诉我,保留位值黄金。所以我们有两个(设置为零)。 那么这是否意味着: 问题一: ~表示36位移位,包含10位类型Id和其余36位本地Id: #00000000000000000000# ShardID 3429的 二进制=1101 0110 0101 因此(hashedValue>>46)=00000 0 110 1 01
我如何添加一个小数点之间的前9位数字和最后2位的值,是拉在行:?作为,读取的值不包含小数点。 样本数据 输入: 所需输出:
对数极坐标变换常用于图像中的相位相关,使用傅里叶变换来估计旋转和平移等。但是,我对如何将其应用于音频信号有点困惑。我正在尝试通过对数极坐标变换(LPT)和相位相关来估计两个音频信号之间的时移。我在音频信号中使用https://en.wikipedia.org/wiki/Log-polar_coordinates应用了LPT,并使用带有极性(θ,rho)的matlab绘图仪应用了LPT,直到这里,没
问题内容: 如何使用分布式方法,IPython和Spark查找整数的整数中位数?该元素约为700,000个元素,因此太大而无法收集和找到中位数。 使用Scala答案的思想,我试图用Python编写类似的答案。 我知道我首先要排序。我不知道怎么。我看到了(按给定的RDD排序)和(按假定的(key,value)对组成的this排序)。我认为两者都使用键值,而我只有整数元素。 首先,我在想做什么? 接下