【发布时间】:2021-02-21 08:26:01
【问题描述】:
我有一个如下的字母数字字符串列表
["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"]
感谢任何潜在客户。提前致谢。
【问题讨论】:
-
您可以在字符串
\w(?=\w*\w{4}$)的末尾匹配一个断言4 个单词字符的单词字符并替换为Xregex101.com/r/xY73eY/1 -
嗨,保罗,谢谢您的信息。我已经尝试过了。这里的问题是,上面的正则表达式只匹配一个元素。字符串输入 = "[\"nG5wnyPVNxS6PbbDNNbRsK5zanG94Et6Q4y74\",\"GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1odeNv\",\"GgQoDWqP7KtxXeePyyebu5EnNp8XxPC1o12NN\"]";布尔有效 = input.matches("\\w(?=\\w*\\w{4}$)");这返回 false,因为它与元素列表不匹配。
-
任何答案对你有用吗?
-
如果我必须使用自己的实现进行屏蔽,所有提到的建议都有效。在这里,我必须使用第三方定义的方式,只传递一个与我的字符串匹配的正则表达式 ((\\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");