Regex 用于屏蔽数据的正则表达式

Regex 用于屏蔽数据的正则表达式,regex,replace,Regex,Replace,我正在尝试为敏感数据上的JSON响应实现正则表达式 JSON响应带有AccountNumber和AccountName 掩蔽细节如下 accountNumber Before: 7835673653678365 accountNumber Masked: 783567365367**** accountName Before : chris hemsworth accountName Masked : chri* ********* 如果我只做[0-9]{12}和(?![0-9]{12}),

我正在尝试为敏感数据上的JSON响应实现正则表达式

JSON响应带有AccountNumber和AccountName

掩蔽细节如下

accountNumber Before: 7835673653678365
accountNumber Masked: 783567365367****

accountName Before : chris hemsworth
accountName Masked : chri* *********
如果我只做
[0-9]{12}
(?![0-9]{12})
,我就能够匹配上面的内容,当我替换这个时,它只替换为*,但我的正则表达式没有生成正确的输出


如何从regex生成如上所述的输出?

如果匹配
[0-9]{12}
并将其直接替换为前面的
accountNumber:*8365

没有列出任何编程语言,但替换末尾数字的一个选项是使用正向查找来断言左边是12位,后面是正向查找来断言右边是0+位,后面是字符串的结尾

然后在替换中使用
*

如果json的值与
chris hemsworth
7835673653678365
的值完全一致,则可以忽略正面的lookaheads
(?=\d*$)
(?=[\w]*$)
,它们为以下两个表达式断言字符串的结尾

如果要匹配的数据位于字符串的末尾,并且字符串包含更多数据,则使用具有正向前瞻性的版本,这样您就不会替换比预期更多的匹配项

(?<=[0-9]{12})(?=\d*$)\d
在爪哇

(?<=[\\w ]{4})(?=[\\w ]*$)[\\w ]

(?如果您只想屏蔽除前N个字符以外的字符,请不要认为您真的是一个复杂的正则表达式。要忽略前N个字符并用
*
替换后面的每个字符,您可以编写一个这样的通用正则表达式

(?<=.{N}).

Java代码

String s = "7835673653678365";
System.out.println(s.replaceAll("(?<=.{12}).", "*"));
String s = "chris hemsworth";
System.out.println(s.replaceAll("(?<=.{4}).", "*"));
对于
AccountName
案例,N=4,因此您的正则表达式变为

(?<=.{12}).
(?<=.{4}).

谢谢!!!我正在使用java…这在网上很好用,但在java中却不起作用seems@KaranChaudhary在Java中,您必须双重转义反斜杠,如
\\d
\\w
(?感谢Puspesh,使用您的正则表达式我能够解决这个问题,唯一的问题是替换,作为json数据,它正在替换结尾“也是从字符串中添加的,所以我添加了这样的正则表达式(?!^)。(?!$)(?=。{6})。这对JSON@KaranChaudhary:很好,您已经根据需要调整了正则表达式:)。同样在您的正则表达式中,我认为您可以删除此部分
(?!$)
,因为它看起来是多余的。
783567365367****
(?<=.{4}).
String s = "chris hemsworth";
System.out.println(s.replaceAll("(?<=.{4}).", "*"));
chri***********