You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式选中捕获组中最后4个字符之前的所有内容?

如何使用正则表达式选中捕获组中最后4个字符之前的所有内容?

需求明确

需要对字符串中idNumber=后的内容按以下规则处理:

  • 当内容长度>4时:将最后4位之前的所有字符替换为*,保留最后4位
  • 当内容长度=4时:完全保留原内容
  • 当内容长度<4时:替换前部分为*,保留剩余内容(示例未覆盖此场景,可按需调整逻辑)

解决方案

单纯靠正则替换无法直接根据匹配内容的长度做分支处理,需要结合Java的Matcher类实现动态替换逻辑:

完整代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IdNumberMasking {
    public static void main(String[] args) {
        String str = "{Index1=StudentData(studentName=Sam, idNumber=321231312), Index2=StudentData(studentName=Adam, idNumber=5675), Index3=StudentData(studentName=Lisa, idNumber=67124)}";
        // 匹配idNumber=后到)之间的字母数字
        Pattern pattern = Pattern.compile("(?<=idNumber=)[a-zA-Z0-9]+(?=\\))");
        Matcher matcher = pattern.matcher(str);
        StringBuffer result = new StringBuffer();
        
        while (matcher.find()) {
            String id = matcher.group();
            String replacement;
            if (id.length() == 4) {
                replacement = id;
            } else if (id.length() > 4) {
                // 生成对应数量的*,拼接最后4位
                replacement = "*".repeat(id.length() - 4) + id.substring(id.length() - 4);
            } else {
                // 长度<4的场景,这里实现为前缀加*保留原内容,可按需修改
                replacement = "*" + id;
            }
            matcher.appendReplacement(result, replacement);
        }
        matcher.appendTail(result);
        System.out.println(result.toString());
    }
}

代码说明

正则表达式解析

  • (?<=idNumber=):正向零宽断言,确保匹配内容的前缀是idNumber=,但不捕获该前缀
  • [a-zA-Z0-9]+:匹配idNumber=后的所有字母数字(修正了原正则漏写0的问题)
  • (?=\)):正向零宽断言,确保匹配内容的后缀是),但不捕获该后缀

替换逻辑

  1. 遍历所有匹配到的idNumber值
  2. 根据字符串长度分情况处理:
    • 长度为4:直接保留原字符串
    • 长度大于4:用长度-4个*替换前半部分,拼接最后4位
    • 长度小于4:示例未给出具体要求,这里默认在原内容前加一个*,如果需要全部替换为*,可改为replacement = "*".repeat(id.length());

运行结果

执行代码后,输出与期望完全一致:

{Index1=StudentData(studentName=Sam, idNumber=*****1312), Index2=StudentData(studentName=Adam, idNumber=5675), Index3=StudentData(studentName=Lisa, idNumber=*7124)}

内容的提问来源于stack exchange,提问作者Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:55:52