java regex 屏蔽列表中的所有元素,最后 4 个字符可见

标签 java regex masking

我有一个字母数字字符串列表,如下所示

["nG5wnyPVNxS6PbbDNNbRsK5zanG94Et6Q4y74","GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1odeNv","GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1o12NN"]

我需要屏蔽最后 4 个字符可见的所有元素,并且 [ "不得如下屏蔽。

["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4y74","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdeNv","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX12NN"]

我尝试过使用

(\\W+)(\\W+)(\\w+)(\\w+)(\\w+)(\\w+)(\\w+)(\\W+)(\\W+) 

作为键,$1$2XXXXXXXXXX$4$5$6$7$8$9 作为值

maskedValue = maskedValue.replaceAll("(\\W+)(\\W+)(\\w+)(\\w+)(\\w+)(\\w+)(\\w+)(\\W+)(\\W+)", "$1$2XXXXXXXXXX$4$5$6$7$8$9")

但这仅掩盖了第一个元素。

["XXXXXXXXXXdeNv","nG5wnyPVNxS6PbbDNNbRsK5zanG94Et6Q4y74"]

任何线索都将受到赞赏。提前致谢。

最佳答案

对于单个值,您可以使用断言来匹配在字符串末尾断言 4 个字符的单词字符。

\w(?=\w*\w{4}$)

Regex demo | Java demo

String values[] = {"nG5wnyPVNxS6PbbDNNbRsK5zanG94Et6Q4y74","GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1odeNv","GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1o12NN"};
for (String element : values)
    System.out.println(element.replaceAll("\\w(?=\\w*\\w{4}$)", "X"));

输出

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4y74
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdeNv
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX12NN

对于整个字符串,您可以在正向后查找中使用有限量词来匹配开头 " 后跟多个单词字符。然后匹配结尾之前有 4 个字符的所有字符

"(?<=\"{0,100})\\w(?=\\w*\\w{4}\")"

Regex demo | Java demo

String regex = "(?<=\"{0,100})\\w(?=\\w*\\w{4}\")";
String string = "[\"nG5wnyPVNxS6PbbDNNbRsK5zanG94Et6Q4y74\",\"GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1odeNv\",\"GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1o12NN\"] ";
System.out.println(string.replaceAll(regex, "X"));

输出

["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4y74","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdeNv","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX12NN"] 

关于java regex 屏蔽列表中的所有元素,最后 4 个字符可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64751285/

相关文章:

java - 检索 HashMap 的键

java - 在 android webview 中阻止视频 - shouldInterceptRequest() 的替代方法

java - 在java中将负int赋给long

regex - 宽度不敏感的正则表达式匹配

javascript - jQuery/JavaScript 干净的字符串,因此只有单词存在

javascript - 如何将 > 字符后的每个字母大写并在遇到 < 字符时停止?

dart - 如何在 Flutter 的 TextField 中添加 mask ?

java - 装饰者模式适合这里吗

java - java应用程序中有超过150个 Activity 线程

java - 如何在正则表达式中分组