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

C#正则表达式匹配数字时排除指定常量数字的实现方法

解决C#中敏感数字掩码时排除指定常量的问题

问题根源

你当前的正则表达式@"[0-9]{4,}"会匹配所有4位及以上的数字序列,包括需要保留的固定常量,因此导致误替换。

解决方案:使用正则负向断言排除指定常量

通过在正则中添加负向预查,可以精准排除你不想替换的固定数字常量,只匹配其他符合条件的敏感数字。

1. 单个常量的情况

假设需要保留的固定常量为8001234567,修改后的代码如下:

string original = "this is your sensitive digit 12345 , if you have any question please call 8001234567";
// 指定要排除的固定常量
string excludedNumber = "8001234567";
// 构建正则模式:匹配4位及以上数字,但排除指定常量
string pattern = $@"\b(?!{Regex.Escape(excludedNumber)}\b)\d{{4,}}\b";
string result = Regex.Replace(original, pattern, "****");

执行后输出:
this is your sensitive digit **** , if you have any question please call 8001234567

2. 多个常量的情况

如果需要排除多个固定数字常量,可以将它们组合到正则中:

string original = "this is your sensitive digit 12345 , support lines: 8001234567 / 4009876543";
// 定义需要排除的常量列表
string[] excludedNumbers = { "8001234567", "4009876543" };
// 转义常量并拼接成正则分支
string excludePattern = string.Join("|", excludedNumbers.Select(Regex.Escape));
// 构建最终正则模式
string pattern = $@"\b(?!({excludePattern})\b)\d{{4,}}\b";
string result = Regex.Replace(original, pattern, "****");

代码说明

  • \b:单词边界,确保匹配的是完整的数字序列,避免部分匹配(比如数字串中包含常量的片段)。
  • (?!{excludedNumber}\b):负向预查,断言当前位置后不是指定的常量,直接排除该常量的匹配。
  • Regex.Escape():转义常量中可能存在的特殊字符(即使是纯数字,也建议使用,保证兼容性)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:40:18