本文介绍一种基于 Java 的正则表达式方案,通过环视断言(lookaround)精准匹配每个单词中除首尾外的所有非空白字符,并将其替换为指定掩码字符(如 x),适用于多词、含空格、标点及边界情况(单/双字符单词)的文本脱敏处理。
本文介绍一种基于 java 的正则表达式方案,通过环视断言(lookaround)精准匹配每个单词中除首尾外的所有非空白字符,并将其替换为指定掩码字符(如 `x`),适用于多词、含空格、标点及边界情况(单/双字符单词)的文本脱敏处理。
在数据脱敏或日志匿名化场景中,常需保留单词的“可识别轮廓”(如首尾字符),同时隐藏中间内容。例如将 India → Ixxxa、White House building → Wxxxe Hxxxe bxxxxxxg。关键挑战在于:不能简单按位置或全局替换,而需按“每个单词内部”独立处理,且兼容空格、标点、极短单词等边界情况。
核心思路是利用正向先行断言((?=S))和正向后行断言((?,构造一个零宽条件:仅当某个非空白字符(S)左侧和右侧都存在至少一个非空白字符时,才将其匹配。该模式 (?! 在 Java 中需对反斜杠进行双重转义,实际正则表达式为: 完整示例代码如下: 运行输出: ✅ 优势说明: ⚠️ 注意事项: 该方案简洁、健壮、符合正则设计最佳实践,是单词级字符掩码任务的推荐解法。String regex = "(?<=\S)\S(?=\S)";
public class WordMasker {
public static void main(String[] args) {
String input = "India
" +
"Australia
" +
"North America
" +
"South America
" +
"White House building
" +
"a
" +
"ab
" +
"abc
" +
"tthis123_isatest
" +
"!@#$%";
String result = input.replaceAll("(?<=\S)\S(?=\S)", "x");
System.out.println(result);
}
}Ixxxa
Axxxxxxxa
Nxxxh Axxxxxa
Sxxxh Axxxxxa
Wxxxe Hxxxe bxxxxxxg
a
ab
axc
txxxxxxxxxxxxxxt
!xxx%

















